我的 SQLite 数据库中有两行,时间戳为 2 月 7 日星期六和 3 月 6 日星期五。
我正在运行此查询:
select strftime('%w', datetime(CreationDate / 1000, 'unixepoch')),
datetime(CreationDate / 1000, 'unixepoch'),
CreationDate from mytable
输出为:
"6" "2015-03-07 02:17:02" "1425694622000"
"6" "2015-02-07 05:00:00" "1423285200000"
很明显出了问题,这两个时间戳都是星期六。我假设问题是我将时间戳除以 1000,然后再将其转换为 unix 纪元,而日期时间不喜欢这样?
如何建议在日期时间中返回正确的日期?我确实需要以毫秒为单位存储内容,而不是其他时间。
最佳答案
结果正确,2015年2月7日和2015年3月7日都是星期六。请记住,非闰年 2 月有 28 天,平均分为 7 天的周,因此 3 月的日期将具有相同的星期几。
$ cal 2015
2015
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 31
您可能会对时区感到困惑。 Unix time is the number of seconds since January 1st, 1970 UTC 。默认SQLite date functions will use the UTC time zone 。如果您希望时间为本地时区,则必须告诉 SQLite。
sqlite> select strftime('%w', datetime(1425694622000 / 1000, 'unixepoch'));
6
sqlite> select strftime('%w', datetime(1425694622000 / 1000, 'unixepoch'), "localtime");
5
可以通过 datetime 或 strftime 来完成。我选择了 strftime,因为时区使一切变得复杂,所以我想在格式化阶段尽可能晚地添加它。
关于SQLite unix 纪元转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929982/