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

dav*_*420 8 java timezone scala 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
Run Code Online (Sandbox Code Playgroud)

在这个例子中,来自America/New_York的时间戳被强制到欧洲/伦敦.当我将DateTime转换回String时,我希望找回我输入的原始字符串.

另外,当我问时间戳它的月份是哪一天时,我希望它说是从16日开始(因为这是它生成的地方的日期),而不是第17天(尽管那是日期是什么)在同一时刻的我的时区).

我该怎么做呢?

eri*_*son 17

尝试创建DateTimeFormatter 启用了偏移量解析.这应该使解析的DateTime对象保留最初解析的字符串的偏移量.

如果这不起作用,您可能需要单独存储时区.然后,要打印日期,您需要检索日期本身目标时区.使用所需的时区设置格式化程序,并使用它来格式化日期.

  • 从来不知道偏移解析器默认情况下会被关闭.对于ISODateTimeFormat来说,这似乎很奇怪.使用文档中描述的装饰器,使用`ISODateTimeFormat.dateTimeParser().withOffsetParsed().parseDateTime(dateAsString);`解决了我的问题.谢谢你的回答.http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormatter.html (4认同)