Tag: timezone

Java – 存储GMT时间

我的服务器有GMT + 7,所以如果我移动到另一台服务器有另一个GMT时区,存储在db中的所有日期都不正确? 是Q1是正确的,我将如何在GMT + 0时区存储日期并将其显示在每个成员选择的自定义GMT时区中 我如何在java中使用GMT + 0获取日期

Oracle的日期和时间,不通过JDBC进行夏令时

发出以下SQL会通过PL / SQL,ODBC和JDBC生成不同的结果: select sysdate from dual 在PL / SQL或ODBC上运行时,日期和时间是正确的。 在JDBC上,它少了一个小时。 它似乎没有考虑夏令时。 例如,在PL / SQL上,结果是2012-11-05 16:53:53.0 ,在JDBC上,它是2012-11-05 15:53:53.0 。 它只发生在一些数据库上。 更改数据库时区( select dbtimezone from dual )似乎不会影响结果。 该命令正在巴西执行。 原始GMT偏移为-03:00,因为夏令时,当前偏移为-02:00。 客户端JVM的时区数据库是最新的。 要诊断数据库中的“错误”结果,只需打印结果: ((OracleResultSet) statement.executeQuery(“select sysdate from dual”)).getTIMESTAMP(1).toString(); Oracle的TIMESTAMP toString方法不依赖于时区信息。 JVM的时区可能仅在创建TIMESTAMP之前影响结果,即在从网络读取并将其转换为Java中的表示时。 测试更改客户端和数据库服务器时间配置: SYSDATE始终返回在数据库服务器中解析的日期/时间,客户端JVM的user.timezone选项和客户端的机器时间配置无关紧要。 另一方面,使用两个时区信息解析获取SYSTIMESTAMP :看起来它从UTC服务器获取日期和时间,然后在客户端中应用时区以获取本地日期和时间。 客户端运行Windows,服务器运行Linux。 为了让事情变得更奇怪,发出一个TO_CHAR也会产生错误的结果: select TO_CHAR(SYSDATE, ‘DD/MM/YYYY HH24:MI:SS’) from dual 直接在Oracle: 06/11/2012, 10:38:49 : 06/11/2012, […]

夏令时的持续时间

我有一个对象Shift ,有两个字段: startDateTime和endDateTime作为Joda-Time的DateTime 。 我的转变包括夏令时英国的变化。 它开始于25/03/2017 13:00 ,结束于26/03/2017 02:00 (基本上应该在26/03/2017 01:00结束,但这个日期不存在,并且endDate转移+1小时)。 根据这个网站 : 当地标准时间即将到达2017年3月26日星期日时,01:00:00时钟转发1小时至2017年3月26日星期日,当地白天时间02:00:00。 现在,如果我想跟踪一个员工的工作小时数new Duration(startDateTime, endDateTime).toStandardHours().getHours()将给我13个小时。 如何使用Joda-Time检测夏令时是否在我的class次持续时间内开始或结束?

如何在JDBC中配置正确的时区?

我有这个url在我的意大利网站上设置连接,但是,当我尝试从网站执行一些插入操作时,日期仍然不正确。 (应该是例如:01:24,但它是02:24) jdbc.url=jdbc:mysql://sql.example.com/database?autoReconnect=true&characterEncoding=UTF-8&sessionVariables=time_zone=’Europe/Rome’ 我是否需要添加任何其他参数才能使其正常工作? 是否有所有时区的完整列表?

Java Date,使用特定日光模式渲染

我有一个Java Date ,从夏天开始,在夏令时期间。 例如: 2009年6月1日上午06:00太平洋时间 我的问题是,如何将此日期显示为当地时区和当前夏令时模式 (在我的太平洋标准时间内)? 2009年6月1日太平洋标准时间05:00 Java的Date.toString()和SimpleDateFormat以原始夏令时模式显示日期。 例: System.out.println(new Date(1243861200000L)); 输出: Mon Jun 01 06:00:00 PDT 2009 DateFormat dateFormat = new SimpleDateFormat(“MMM dd, yyyy hh:mm aa zzz”); dateFormat.setTimeZone(TimeZone.getTimeZone(“PST”)); System.out.println(dateFormat.format(new Date(1243861200000L))); 输出: 2009年6月1日上午06:00太平洋时间 我真正想看的是太平洋标准时间凌晨5点(相当于太平洋夏令时上午6点)。 有没有办法强迫它使用另一种夏令时模式? 跟进:顺便说一下,这是Windows XP的行为。 6月1日上午6点创建的文件(由资源管理器,命令提示符等)将在6月1日冬季凌晨5点出现。

为什么在Android中的Zone更改时,DateTimeZone.getDefault()不会更新

我在Stackoverflow上回顾了许多与TimeZones相关的问题,但我找不到我正在努力解决的问题: 为什么Joda的DateTimeZone.getDefault()在TZ更改时没有返回更新的时区(恢复应用程序后?)。 TimeZone.getDefault()似乎工作正常 。 我应该使用DateTimeZone.forTimeZone(TimeZone.getDefault())来获取最新的Joda的DateTimeZone对象吗? 以下是如何复制: 启动打印DateTimeZone.getDefault()和TimeZone.getDefault()应用程序: 09-15 16:46:59.512 14961-14961 / com.example.android.whatever D / TimeZone: DateTimeZone.getDefault()= Europe / London; TimeZone.getDefault()= libcore.util.ZoneInfo [id =“Europe / London” ,…] 转到设置 – >将时区更改为PDT。 返回打印东西的应用程序(例如在onResume()中): 09-15 08:49:24.727 14961-14961 / com.example.android.whatever D / TimeZone: DateTimeZone.getDefault()= Europe / London; TimeZone.getDefault()libcore.util.ZoneInfo [id =“America / Los_Angeles” ,…] 在这个阶段,我可以旋转App。 DateTimeZone.getDefault()将被卡住。 只有在应用onRestart之后 – 该值才是正确的。 为什么会这样?

Java的BST ZoneId代表什么?

我在DB中存储了这个时间框架:伦敦(BST)的15:00到16:00的任何一天 当我在此时间帧之间收到事件时,我需要执行一个程序IF。 我现在在巴黎(16:22)运行测试,在伦敦的时间是15:22(所以在存储在数据库中的时间帧之间)。 这是我的代码 // create Local Date Time from what I have stored in the DB LocalDateTime dateTime1 = LocalDateTime.of(2017, Month.JUNE, 15, 15, 00); LocalDateTime dateTime2 = LocalDateTime.of(2017, Month.JUNE, 15, 16, 00); Instant now = Instant.now(); System.out.println (now.isAfter (dateTime1.atZone(ZoneId.of(“BST”, ZoneId.SHORT_IDS)).toInstant())); System.out.println (now.isBefore(dateTime2.atZone(ZoneId.of(“BST”, ZoneId.SHORT_IDS)).toInstant())); 理论上现在(巴黎16:22 /伦敦15:22)在伦敦(15:00)的dateTime1之后和伦敦的dateTime2(16:00)之前 但我得到的不是那个dateTime2

亚利桑那州TimeZone日节省光

我想在特定时区获得当前时间。 我尝试了以下代码。 Calendar j = new GregorianCalendar(TimeZone.getTimeZone(“US/Mountain”)); j.setTimeInMillis(Calendar.getInstance().getTimeInMillis()); System.out.println(j.get(Calendar.HOUR_OF_DAY)+”:”+j.get(Calendar.MINUTE)); TimeZone tz = TimeZone.getTimeZone(“US/Mountain”); System.out.println(“tz.getRawOffset()”+tz.getRawOffset()/3600); System.out.println(tz.getDSTSavings()); System.out.println (tz.inDaylightTime(new Date())); 我得到的答案令人惊讶 – 16:57 – 错误1小时tz.getRawOffset() – 7000 3600000真实 – 为什么亚利桑那州的夏令时是真的? 如何获得凤凰城或美国任何其他城市的正确挂钟时间?

如何在Java中设置默认时区并控制日期存储在DB上的方式?

我遇到了以下问题,当我在虚拟Linux服务器上安装我的webapp战争时出现了这个问题。 这是:我的服务器系统时间似乎是正确的,实际上shell上的输入日期是: Mon Apr 11 11:47:30 CEST 2011 这是我的“挂钟时间”。 即使mysql工作正常,如果我选择now(),我得到: mysql> select now() -> ; +———————+ | now() | +———————+ | 2011-04-11 11:52:57 | +———————+ 1 row in set (0.01 sec) 但是我的应用程序(Spring + hibernate on Java6 + tomcat 6)将使用GMT时区保存DB上的每个日期(并且时间与GMT的差异正确地抵消,这很好)。 现在问题是我用GMT显示所有日期,即使我这样做: static final DateFormat format = new SimpleDateFormat( “dd/MM/yyyy ‘alle’ HH:mm”, Locale.ITALY); 我没有得到正确偏移的小时数,但它们仍然保留在GMT中,如果我在模式中放置Z(显示时区),它们会显示GMT。 在Windows下,我在mySQL上的日志值中存储了日期值。 所以在我开发的Windows机器上,我将在CEST中拥有所有日期。 这很烦人,因为我不知道如何预测系统的行为方式,我不得不做无聊的测试并弄清楚如何改变它。 […]

在Java ME中将“America / Los Angeles”时区转换为“PST”或“PDT”

我的服务器向我发送格式为“America / Los Angeles”的时区。 在客户端,我有时间需要在该时区显示。 答案将是“PST”或“PDT”,具体取决于给定时间的夏令时。 我该如何进行转换? 我在使用Java ME(Blackberry 4.7,准确),所以我不能使用Joda Time。 我需要在很多日期(但只有一个时区)快速进行此计算,因此我不能让服务器向我发送偏移量,因为偏移量可能会根据日期而变化。 编辑:让我重申一下这个问题,因为似乎有些混乱。 我获得了zoneinfo名称和日期。 我想知道那个时区在该时区的GMT偏移量。 答案将根据夏令时而有所不同。 作为额外的奖励,我想让TLA向用户展示(即“PST”或“PDT”),但这是次要的。 解决方案:我将在此总结解决方案,因为从下面的答案中可以得出非常清楚的结论。 这基本上是我需要的,在J2ME中: TimeZone zone = TimeZone.getTimeZone(“America/Los_Angeles”); Calendar calendar = Calendar.getInstance(); calendar.setTimeZone(zone); calendar.setTime(new Date(2011, 1, 1, 12, 0, 0)); System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND))); calendar.setTime(new Date(2011, 6, 1, 12, 0, 0)); System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));