28

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 年が常に出力されるのかはわかりません。

4

3 に答える 3

63

Unix の時間は秒単位、Java の時間はミリ秒単位です。

1000倍する必要があります

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

あなたはこの答えをチェックしたいかもしれません

于 2012-08-20T01:33:08.017 に答える
5

Unixタイムスタンプは、以来の1970-01-01 00:00:00数です。

DateTime(long instant)コンストラクターにはMILLISECONDSの数が必要です。

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

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

于 2012-08-20T01:39:31.297 に答える
3

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

Long _sLong = new Long(((long)_startTS)*1000);
于 2012-08-20T01:35:04.600 に答える