我在CEST时区(+2),并且在理解JodaTime如何存储DateTime时遇到一些困难。采取以下代码:
String timeString = "2012-09-10T13:30:00+01:00";
DateTime ddateTime = new DateTime(timeString);
DateTime dtLisbon = ddateTime.withZone(DateTimeZone.forID("Europe/Lisbon"));
运行后,变量将获得以下值:
timeString = '2012-09-10T13:30:00+01:00'
ddateTime = '2012-09-10T14:30:00.000+02:00'
dtLisbon = '2012-09-10T13:30:00.000+01:00'
为什么JodaTime不将ddateTime设置为我要发送的确切字符串?我是否总是需要调用.withZone方法来获得正确的瞬间?
谢谢
最佳答案
您应该正在调用一个DateTime
的DateTimeZone
构造函数,如下所示:
new DateTime(timeString, DateTimeZone.forID("Europe/Lisbon"));
如果您逐步完成Joda提出的电话,我强烈建议您这样做,以便您能感觉到所有部件如何组合在一起,那么您会看到电话链如下:
DateTime(Object)
-> BaseDateTime(Object, Chronology)
-> AbstractConverter.getChronology(Object, Chronology)
-> DateTimeUtils.getChronology(Chronology)
-> ISOChronology.getInstance()
-> DateTimeZone.getDefault()
-> System.getProperty("user.timezone")
因此,当您不提供
ddateTime
而不是UTC + 1(即您提供的字符串中的时区)时,DateTimeZone
最终成为UTC + 2(即您的时区)的原因。