我的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
的整数值是否与使用用于SQLite的DB Browser的数据库上的整数值相同
但是,调用ToString()
时,显示的结果日期是将条目写入DB的时间的一小时 FW!
为什么日期不匹配?
(请注意,我尝试将FromUnixTimeMilliseconds(Time).DateTime
替换为FromUnixTimeMilliseconds(Time).UtcDateTime;
,但结果相同)
答案 0 :(得分:1)
我不确定为什么上面的FromUnixTimeMilliseconds
无效,但这可以正常工作:
var time = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)
.AddMilliseconds(Time)
.ToLocalTime();