web-dev-qa-db-ja.com

Scalaで、エポックからの秒数をjoda DateTimeに変換します

Epochから数秒で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
17
randombits

簡単なREPLセッションを確認してください:

_scala> 1378607203 * 1000
res6: Int = -77299016
_

変ですよね? :)これがなぜ起こっているのか推測できますか?

使用しようとしているDateTimeのコンストラクターから抽出したヒントを提供します。

_DateTime(long instant)
_

まだわかりませんか?少し違うバージョンを試してみましょう:

_scala> 1378607203L * 1000
res8: Long = 1378607203000
_

Long型のリテラルを示すLに注意してください。あなたは1兆を求めています!そして、Intは2ビロンまでしか行きません:

_scala> Int.MaxValue
res7: Int = 2147483647
_

したがって、DateTime(1378607203L*1000)を実行すると機能します。

37
pedrofurla