【发布时间】:2012-03-25 07:55:48
【问题描述】:
我正在使用 System.currentTimeMillis();获取我的“修改”数据库字段的当前时间。我通过将其除以 1000 将其转换为 unix 纪元。 但是,即使手机/模拟器的日期和时间设置为真实时间,数据库中存储的值也比真实时间早 2 小时。
我在 GMT+2,但我不知道这是如何影响的。
不是 System.currentTimeMillis();获取当前时间设置的当前时间?
【问题讨论】:
我正在使用 System.currentTimeMillis();获取我的“修改”数据库字段的当前时间。我通过将其除以 1000 将其转换为 unix 纪元。 但是,即使手机/模拟器的日期和时间设置为真实时间,数据库中存储的值也比真实时间早 2 小时。
我在 GMT+2,但我不知道这是如何影响的。
不是 System.currentTimeMillis();获取当前时间设置的当前时间?
【问题讨论】:
改为使用 Calendar.getInstance(),如下所示:
Calendar curTime = Calendar.getInstance();
这个curTime 对象将是特定于语言环境的。
来自 API,关于 currentTimeMillis()
此方法不应用于测量超时或其他经过的时间测量,因为更改系统时间会影响结果。
【讨论】:
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));
【讨论】:
【讨论】: