将Unix时间戳转换为带Joda时间的字符串
问题描述:
当试图将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年总是输出,所以希望有人能看到我犯的一个愚蠢的错误。
答
Unix时间是以秒为单位,Java的时间是毫秒
你需要多个它由1000
DateTime _startDate = new DateTime(_sLong * 1000L);
你可能要检查这个answer出
答
当你这样做:_startTS*1000
,Java假设你想要一个int,因为_startTS
是一个int(这就是为什么值为1542436352)。尝试铸造它作为一项长期的第一:
Long _sLong = new Long(((long)_startTS)*1000);
答
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
伟大的作品漂亮! – locrizak 2012-08-20 01:39:35
已编辑。您应该使用大写'L'来表示多头。更多可读性。 – 2013-03-12 18:30:52