DateTimeOffset.FromUnixTimeMilliseconds vs sqlite strftime

时间:2019-11-28 05:03:43

标签: c# sqlite asp.net-core-3.0 .net-core-3.0

我的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;,但结果相同)

1 个答案:

答案 0 :(得分:1)

我不确定为什么上面的FromUnixTimeMilliseconds无效,但这可以正常工作:

var time = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)
  .AddMilliseconds(Time)
  .ToLocalTime();