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来避免演员变长。

于 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 回答