Android:存储在db中的时间与手机上的时间不同

时间:2012-03-24 22:45:06

标签: java android

我正在使用System.currentTimeMillis();获取我的'修改'数据库字段的当前时间。我将它除以1000将其转换为unix时代。 但是,即使手机/模拟器的日期和时间设置为真实时间,数据库中存储的值也比实际时间早2小时。

我在GMT + 2,但我找不到这是如何影响的。

不是System.currentTimeMillis();获取当前时间设置的当前时间?

3 个答案:

答案 0 :(得分:2)

currentTimeMillis不返回与时区相关的时间戳:

  

当前时间与1970年1月1日午夜之间的差异(以毫秒为单位) UTC

但是,最好以UTC格式存储时间戳,并且包括时区偏移量。要显示“正确”时间,您可以使用SimpleDateFormat

SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
// set your Timezone; or use TimeZone.getDefault() for the device timezone
df.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
String time = df.format(new Date(timestamp));

答案 1 :(得分:2)

使用Calendar.getInstance()代替,如下所示:

Calendar curTime = Calendar.getInstance();

curTime对象将是特定于语言环境的。

从API,关于currentTimeMillis()

  

此方法不应用于测量超时或其他经过时间的测量,因为更改系统时间会影响结果。

答案 2 :(得分:0)

来自the documentation:

  

“返回当前时间与UTC时间1970年1月1日午夜之间的差异,以毫秒为单位”

它为您提供与您所在时区无关的时间。所以你应该自己计算一下正确的时间。