web-dev-qa-db-ja.com

Joda TimeでUnixタイムスタンプを文字列に変換する

Unixのタイムスタンプをデータベースから日付形式の文字列に変換しようとしたとき。

int _startTS = evtResult.getInt("start"); //outputs 1345867200
Long _sLong = new Long(_startTS); //outputs 1345867200
//I've also tried: Long _sLong = new Long(_startTS*1000); //outputs 1542436352
DateTime _startDate = new DateTime(_sLong); //outputs 1970-01-16T08:51:07.200-05:00

タイムスタンプは次のとおりです:Sat, 25 Aug 2012。なぜ1970が常に出力されるのかわからないので、うまくいけば誰かが私がしている愚かな間違いを見ることができます。

28
locrizak

Unix時間は秒単位、Java時間はミリ秒

1000倍する必要があります

DateTime _startDate = new DateTime(_sLong * 1000L);

これをチェックしたいかもしれません answer out

58
MadProgrammer

Unixタイムスタンプは[〜#〜] seconds [〜#〜]で、_1970-01-01 00:00:00_以降です。

DateTime(long instant)コンストラクタには[〜#〜]ミリ秒[〜#〜]の数が必要です。

_long _startTS = ((long) evtResult.getInt( "start" )) * 1000;
DateTime _startDate = new DateTime( _startTS );
_

編集:またはevtResultでgetLong(..)メソッドを使用して、longへのキャストを回避します。

5
Strelok

これを行うと:_startTS*1000、Javaは、_startTSはintです(そのため、値は1542436352です)。最初に長くキャストしてみてください。

Long _sLong = new Long(((long)_startTS)*1000);
3
Jon Lin