从jodatime DateTime中提取时区

时间:2018-06-06 16:54:52

标签: java datetime jodatime

我收到一个包含ISO8601日期时间的日期时间字符串,如此"2001-07-04T12:08:56.235-07:00",然后以new DateTime("2001-07-04T12:08:56.235-07:00")方式将此字符串解析为jodatime datetime对象,然后再使用它转换为字符串由参数传递的变量格式化程序模式,但是当发生这种情况时,不使用时区,因此正在使用系统的默认时区。我想要的是从第一个给定日期中提取时区(或偏移量),并使用它来相应地打印它。有可能吗?

事先谢谢!

1 个答案:

答案 0 :(得分:4)

不要使用new DateTime("...")。使用DateTime.parse("...")

见差异:

DateTime dateTime1 = new DateTime("2001-07-04T12:08:56.235-07:00");
System.out.println(dateTime1);
System.out.println(dateTime1.getZone());

DateTime dateTime2 = DateTime.parse("2001-07-04T12:08:56.235-07:00");
System.out.println(dateTime2);
System.out.println(dateTime2.getZone());

输出(我在美国东部)

2001-07-04T15:08:56.235-04:00
America/New_York
2001-07-04T12:08:56.235-07:00
-07:00

如您所见,使用new转换为默认时区,而使用parse会保留指定的时区。