在Android模拟器中将unix时间戳转换为日期

时间:2012-05-10 06:43:06

标签: java android timezone timestamp

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

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回来了?

2 个答案:

答案 0 :(得分: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));

:)

答案 1 :(得分:2)

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