gpt4 book ai didi

SQLite unix 纪元转换

转载 作者:行者123 更新时间:2023-12-03 17:48:27 26 4
gpt4 key购买 nike

我的 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"

很明显有些地方出了问题,它说这两个时间戳都是在星期六。我假设问题是我在将时间戳转换为 unix 纪元之前将其除以 1000,而 datetime 不喜欢这样吗?

在日期时间中取回正确日期的建议是什么?我真的需要以毫秒为单位存储东西,而不是其他时间。

最佳答案

结果是正确的,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com