2012-05-10 108 views
2

我有一个时间戳,我想将其转换为日期。我试过这个时间戳:1336425840.这应该是星期一,2012年5月7日21:24:00 GMT,其中GMT是模拟器应该设置的时区。我尝试这样做:在Android模拟器中将unix时间戳转换为日期

final Calendar c = Calendar.getInstance(); 
c.setTimeInMillis(1336425840*1000); 
Date d = c.getTime(); 
Log.i("MyTag", "Hours: " + d.getHours()); 

结果是:时间:23

所以它看起来像返回的日期是根据GMT + 2,这是时区我的系统设置来计算。我期望g.hetHours()返回21,因为仿真器的时区似乎设置为GMT。

此外,该时间戳是使用mktime读取C中的实际日期的结果,这似乎会返回正确的时间戳。但Java似乎指的是不同的时区。我做错了什么?为什么不是星期一,2012年5月7日21:24:00 GMT返回?

+0

检查了这一点的http:/ /stackoverflow.com/questions/2818086/android-get-current-utc-time – moujib

回答

5

我很确定1336425840*1000会给你一个超出int的常规范围的值。实际上,如果您打印Calendar对象的完整日期,则会看到它显示Thu Jan 08 23:56:50 GMT 1970,这说明了您看到的23小时。

更改乘法:(注意L末)

c.setTimeInMillis(1336425840 * 1000L); 

//编辑:容易确认:

System.out.println((1336425840 * 1000L > Integer.MAX_VALUE)); 

:)

+0

是的,我只是自己找到了它。我注意到了1970年:-D谢谢! –

2

您应该使用DateFormat对象,然后使用setTimeZone()设置时区。

+0

是的,这是工作。但为什么我报告的代码不是? –

+0

因为默认情况下它使用您正在使用的计算机的当前时区。你需要告诉它使用GMT来代替。 –

+0

即使没有指定时区,它也在工作。 –

相关问题