如何在Joda-Time时间戳中保留时区?

时间:2011-05-09 21:27:29

标签: java scala timezone jodatime

我正在解析时间戳。当我读到它们时,它们被迫到我当地的时区(欧洲/伦敦)。我想保留原来的时区偏移量。

scala> val fmt = org.joda.time.format.ISODateTimeFormat.dateTimeNoMillis()

scala> val t = fmt parseDateTime ("2012-04-16T23:00:45-04:00")
t: org.joda.time.DateTime = 2012-04-17T04:00:45.000+01:00

scala> t.getDayOfMonth
res2: Int = 17

scala> fmt print t
res1: java.lang.String = 2012-04-17T04:00:45+01:00

在此示例中,来自America / New_York的时间戳被强制到欧洲/伦敦。当我将DateTime转换回String时,我想要取回我输入的原始字符串。

此外,当我问时间戳它是从哪一天来的时候,我希望它说是从16日开始(因为这是它产生的地方的日期),而不是17日(尽管那是什么日期是在同一时刻的我的时区。)

我该怎么做?

1 个答案:

答案 0 :(得分:17)

尝试创建DateTimeFormatter with offset parsing enabled.这会导致已解析的DateTime对象保留最初解析的字符串的偏移量。

如果这不起作用,您可能需要单独存储时区。然后,要打印日期,您需要检索日期本身目标时区。 Set the formatter with the desired time zone,并使用它来格式化日期。