为何JodaTime时区偏移日期时间?

为何JodaTime时区偏移日期时间?,第1张

概述当将字符串“2017-04-21T17:46:00Z”传递到第一种方法时,所得的格式化日期字符串为“06:4621Apr2017”.为什么每小时移动11个小时?输入字符串由JSON中的HTTP服务器应用程序提供.我以为Z后缀指的是祖鲁语,即GMT.privatestaticfinalStringDATE_TIME_FORMAT="hh:mmddMMMy

当将字符串“ 2017-04-21T17:46:00Z”传递到第一种方法时,所得的格式化日期字符串为“ 06:46 21 Apr 2017”.为什么每小时移动11个小时?输入字符串由JSON中的http服务器应用程序提供.我以为Z后缀指的是祖鲁语,即GMT.

private static final String DATE_TIME_FORMAT = "hh:mm dd MMM yyyy";public static String formatTimestamp(String dateTimestamp) {    DateTime dateTime = getDateTimeFromTimestamp(dateTimestamp);    DateTimeFormatter fmt = DateTimeFormat.forPattern(DATE_TIME_FORMAT);    return fmt.print(dateTime);}private static DateTime getDateTimeFromTimestamp(String dateTimestamp) {    return new DateTime(dateTimestamp);}

我怀疑它与时区有关,但尚不清楚如何或在哪里.该代码在格林尼治标准时间(GMT)时区在英国的AndroID设备上运行.

解决方法:

我已经使用Java 7和joda-time 2.7(但不是AndroID版本)进行了测试

这就是我可以重现该问题的方法:

// changing my default timezone (because I'm not in UK)DateTimeZone.setDefault(DateTimeZone.forID("Europe/London"));// calling your methodSystem.out.println(formatTimestamp("2017-04-21T17:46:00Z"));

输出是

06:46 21 Abr 2017

为了检查出什么问题,我将日期格式更改为:

DATE_TIME_FORMAT2 = "hh:mm a dd MMM yyyy Z z zzzz";

其中的平均值为“ AM或PM”,Z为时区偏移量/ ID,z为时区“短”名称,zzzz为时区“长”名称.使用此格式,输出为:

06:46 PM 21 Abr 2017 +0100 BST British Summer Time

因此,创建的日期时间是6PM,比输入早1小时,而不是您想象的11小时(实际上,如果将格式更改为HH而不是hh,则小时数将是18而不是06).

另请注意时区字段:0100 BST英国夏令时.第一部分(0100)表示此日期时间比格林尼治标准时间早一小时,而BST英国夏令时间表示该日期是British’s Daylight Saving Time.

因此,要使输出等于输入,可以有2种选择:

1.将您的默认时区更改为UTC:

DateTimeZone.setDefault(DateTimeZone.UTC);System.out.println(formatTimestamp("2017-04-21T17:46:00Z"));

输出将是:

05:46 21 Apr 2017

如果要将小时更改为17:46,请更改日期格式,用HH代替hh

2.使用接收DateTimeZone的DateTime构造函数:

private static DateTime getDateTimeFromTimestamp(String dateTimestamp) {    // creates a DateTime in UTC    return new DateTime(dateTimestamp, DateTimeZone.UTC);}

输出将与替代项1相同,但是在这种情况下,您无需更改默认时区.

对我来说,替代方案2更有意义,因为:

>您无需更改默认时区(这会在应用程序的其他部分造成混乱)
>您已经知道此代码处理的所有日期均为UTC时间(because of the “Z” in the end)

总结

以上是内存溢出为你收集整理的为何JodaTime时区偏移日期时间?全部内容,希望文章能够帮你解决为何JodaTime时区偏移日期时间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存