在Scala中将自纪元以来的秒数转换为joda DateTime

20

我试图将自纪元以来的秒数转换为Scala中的DateTime对象。我正在使用joda。不幸的是,无论我使用秒还是毫秒,我都得到了奇怪的结果。我在这里做错了什么?

scala> new org.joda.time.DateTime(1378607203*1000)
res2: org.joda.time.DateTime = 1969-12-31T02:31:40.984Z

scala> new org.joda.time.DateTime(1378607203)
res3: org.joda.time.DateTime = 1970-01-16T22:56:47.203Z
1个回答

42

快速检查 REPL 会话:

scala> 1378607203 * 1000
res6: Int = -77299016

有趣,不是吗?:) 你能猜出这是为什么吗?

我会给你一个提示,这个提示来自于你正在尝试使用的DateTime构造函数。

DateTime(long instant)

还是不懂吗?让我们尝试稍微不同的版本:

scala> 1378607203L * 1000
res8: Long = 1378607203000

注意到L表示长整型字面值。你正在请求1万亿!而int类型只能达到20亿:

scala> Int.MaxValue
res7: Int = 2147483647

所以执行 DateTime(1378607203L*1000) 将使其正常工作。


如何将Joda DateTime(1970-01-16T22:56:47.203Z)转换为Unix时间? - Incerteza
4
我会首先建议先学习日期和时间的 API,其次在 Stack Overflow 上提出问题。要在自己的问题下提问,而不是在别人的问题下提问。 - pedrofurla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接