JodaTime-将字符串直接传递给DateTime的构造函数

时间:2012-09-10 21:04:26

标签: java constructor jodatime

我正在使用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方法才能获得正确的时机?

谢谢

1 个答案:

答案 0 :(得分:5)

您应该调用一个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 + 2,这是你的时区,当你没有提供DateTimeZone而不是UTC + 1时,这是字符串中的时区你提供了。