Joda-Time DateTime 更改时区?

Joda-Time DateTime changes timezone?

我正在将看起来像 "2015-06-06T01:51:49-06:00" 的文件中的字符串读取到 Joda-Time DateTime 对象中。但是 DateTime 并没有按照我想要的方式运行。

import org.joda.time.DateTime;

System.out.println("2015-06-06T01:51:49-06:00");
System.out.println(new DateTime("2015-06-06T01:51:49-06:00"));

结果如下

2015-06-06T01:51:49-06:00
2015-06-06T00:51:49.000-07:00

稍后我需要小时和分钟。这里就是 1:51。但是我猜 DateTime 是在不同的时区打印出来的?如何让 DateTime 打印出来 2015-06-06T01:51:49.000-06:00

DateTime stores a time zone, but the DateTime(Object instant) 构造函数首先将 String 转换为瞬间(毫秒),从而丢失时区信息,因此它将默认时区应用于该瞬间。

要保留时区,请使用 DateTime.parse(String str):

System.out.println("2015-06-06T01:51:49-06:00");
System.out.println(new DateTime("2015-06-06T01:51:49-06:00"));
System.out.println(DateTime.parse("2015-06-06T01:51:49-06:00"));

输出

2015-06-06T01:51:49-06:00
2015-06-06T03:51:49.000-04:00
2015-06-06T01:51:49.000-06:00