我的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时代,而日期时间不是这样的吗?
在日期时间内取回正确日期的建议是什么?我真的需要在几毫秒内存储东西而不是其他时间。
答案 0 :(得分:3)
结果是正确的,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,因为时区使一切变得复杂,所以我想在格式化阶段尽可能晚地添加它。