【发布时间】:2019-11-29 17:04:04
【问题描述】:
我的 Sqlite 数据库有一个类型为“INTEGER”的“时间”字段
我从这样的 C++ Windows 服务向它写入 Unix 时间(纪元):
insert into ServicesData (Time, ...) values (((strftime('%s', 'now') - strftime('%S', 'now') + strftime('%f', 'now')) * 1000), ...);
(见https://stackoverflow.com/a/20478329/460084"获取自Unix纪元以来的秒数(%s),减去当前时间的秒数(%S),加上带小数位的秒数(%f),并将结果乘以 1000 以从秒转换为毫秒")
然后我从 .NET Core 3.1 控制台应用程序中读取日期,如下所示:
public class ServicesData {
[Key]
public long Time { get; set; }
...
public string ToString() {
string res="";
var time = DateTimeOffset.FromUnixTimeMilliseconds(Time).DateTime;
res+= time.ToString("dd/MM/yy HH:mm:ss") + " ";
... return res;
}
}
我现在从我的 .NET 应用程序中进行查询在同一个框上,并验证 ServicesData.Time 的整数值与使用 DB Browser for SQLite 的数据库上的整数值相同
但是在调用ToString() 时,结果显示的日期是一小时将条目写入数据库的时间的FW!
为什么日期不匹配?
(注意我尝试用FromUnixTimeMilliseconds(Time).UtcDateTime; 替换FromUnixTimeMilliseconds(Time).DateTime,但得到了相同的结果)
【问题讨论】:
-
当前文化差异?
-
可能是夏令时,但我看不出该设置是如何/在哪里设置的?或者如何解决?
-
我会查看您正在运行代码的机器设置,以便根据日期时间设置来识别该设置
-
所有写和读的代码都在同一台机器上,这就是我困惑的原因
-
如果您存储了 ISO 日期,那么对于每个人(包括几天后的您)来说,都会变得容易很多。 SQLite 不喜欢 ISO 日期而不是 Unix 时间戳,它们也不更准确。事实上,Unix 时间戳是每 秒 的,因此精度低于 ISO 字符串的毫秒数
标签: c# sqlite asp.net-core-3.0 .net-core-3.0