从UTC开始当地时间的一天

时间:2015-12-25 07:29:13

标签: android sqlite utc localtime

我有一个事件表,其中包含UTC(unixepoch)的开始时间,例如

sqlite> SELECT name, startUtc, datetime(startUtc, 'unixepoch') AS datetime FROM events;
name        startUtc    datetime
----------  ----------  -------------------
aaa         1451008800  2015-12-25 02:00:00
bbb         1451039400  2015-12-25 10:30:00

这些值将在Cursor中返回。但是,我希望预先计算每个事件发生的日期与用户的本地时区(对我来说是GMT-08:00)。基本上我想要一个适当日期的时间戳,截断所有更细粒度的字段(小时,分钟等)。这是我的查询与结果一起显示的内容:

sqlite> SELECT name, startUtc, strftime('%s', startUtc, 'unixepoch', 'localtime', 'start of day') AS localDay from events;
name        startUtc    localDay
----------  ----------  ----------
aaa         1451008800  1450915200                                                            
bbb         1451039400  1451001600

完整性检查:

sqlite> SELECT datetime(1450915200, 'unixepoch');
2015-12-24 00:00:00  

这一切似乎都没问题,直到我使用事件的localDay值" aaa"在Calendar对象中。

long localDay = cursor.getLong(cursor.getColumnIndex("localDay"));
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(localDay * 1000); // adjust bc sqlite returns seconds

int day = calendar.get(Calendar.DAY_OF_MONTH); // returns 23, not 24

基本上,java Calendar将时间戳解释为2015-12-23 16:00:00而不是2015-12-24 00:00:00,我最终会错误地查看该事件。

我在这里缺少什么?

0 个答案:

没有答案