Joda-Time DateTime改变时区?

use*_*220 4 java datetime date jodatime

我读从文件看起来像琴弦"2015-06-06T01:51:49-06:00"乔达时间 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"));
Run Code Online (Sandbox Code Playgroud)

结果如下

2015-06-06T01:51:49-06:00
2015-06-06T00:51:49.000-07:00
Run Code Online (Sandbox Code Playgroud)

后来我需要小时和分钟.这将是1:51.但DateTime是在我猜的不同时区打印出来的吗?如何打印DateTime2015-06-06T01:51:49.000-06:00

And*_*eas 6

A DateTime存储时区,但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"));
Run Code Online (Sandbox Code Playgroud)

产量

2015-06-06T01:51:49-06:00
2015-06-06T03:51:49.000-04:00
2015-06-06T01:51:49.000-06:00
Run Code Online (Sandbox Code Playgroud)

  • 啊,是的,Joda的`Object`构造函数.每个人都喜欢的微妙的bug. (2认同)