2012-08-20 176 views
24

当试图将Unix timstamp从数据库转换为日期格式的字符串时。将Unix时间戳转换为带Joda时间的字符串

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年总是输出,所以希望有人能看到我犯的一个愚蠢的错误。

回答

51

Unix时间是以秒为单位,Java的时间是毫秒

你需要多个它由1000

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

你可能要检查这个answer

+0

伟大的作品漂亮! – locrizak 2012-08-20 01:39:35

+4

已编辑。您应该使用大写'L'来表示多头。更多可读性。 – 2013-03-12 18:30:52

3

当你这样做:_startTS*1000,Java假设你想要一个int,因为_startTS是一个int(这就是为什么值为1542436352)。尝试铸造它作为一项长期的第一:

Long _sLong = new Long(((long)_startTS)*1000); 
5

Unix的时间戳是一个数字的SECONDS因为1970-01-01 00:00:00

DateTime(long instant)构造函数需要数字MILLISECONDS

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

编辑:或使用getLong(..)方法对你evtResult,以避免强制转换为长。

+1

我知道..我试图乘以1000,但结果实际上是2018年的时间戳。我需要'* 1000l'和everythign很好。 – locrizak 2012-08-20 15:13:25

相关问题