我在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方法来获得正确的瞬间?

谢谢

最佳答案

您应该正在调用一个DateTimeDateTimeZone构造函数,如下所示:

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(即您的时区)的原因。

09-08 02:47