我的代码:
val pattern = "MM-dd-yy"
val t = DateTime.parse("07-01-86", DateTimeFormat.forPattern(pattern)).toDateTime(DateTimeZone.forID("GMT"))
val z = t.getMillis.asInstanceOf[Long]
println("ms= "+z) // expected output: 520560000000 actual output: 520578000000
多个在线GMT日期转换器提供与DateTime不同的毫秒输出。谁知道为什么?
答案 0 :(得分:0)
在您的解决方案中,在解析日期时间时会隐式使用本地时区。你应该使用
val t = DateTime.parse("07-01-86", DateTimeFormat.forPattern(pattern).withZoneUTC())
强制在UTC区域中创建DateTime
。然后,millis是520560000000
。无需再对其执行toDateTime(DateTimeZone)
。
否则,与您的构造
val t = DateTime.parse("07-01-86", DateTimeFormat.forPattern(pattern)).toDateTime(DateTimeZone.forID("GMT"))
DateTime
将首先在您当地的TZ中创建(即您的 TZ中的午夜,然后是&#34) ;铸造"到UTC,但保留时间戳(即它将是相同的时间戳,但以UTC格式解释,因此时间部分和日期部分将根据您的本地TZ偏移而改变)。
示例(我的TZ是+02:00):
DateTime.parse("07-01-86", DateTimeFormat.forPattern(pattern)) // --> 1986-07-01 00:00 (+02:00)
.toDateTime(DateTimeZone.forID("GMT")) // --> 1986-06-30 22:00 (UTC)
我认为你可以使用UTC
而不是GMT
,但也有
DateTimeFormat.forPattern(pattern).withZone(...)
您可以在此处提供所需的区域。