3

我有一个要转换为日期的时间戳。我试过这个时间戳: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 没有返回?

4

2 回答 2

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));

:)

于 2012-05-10T07:53:22.227 回答
2

您应该使用一个DateFormat对象,然后使用setTimeZone().

于 2012-05-10T07:12:10.230 回答