gpt4 book ai didi

c# - Utc 日期在 Sqlite 中保存为本地日期

转载 作者:IT王子 更新时间:2023-10-29 06:30:23 26 4
gpt4 key购买 nike

我有一个包含日期字段的 Sql 数据库。

我使用Dapper更新数据库如下:

const string sql = "UPDATE AdminDb.Users " +
"SET IsLoggedOn = 1, LastLoggedOn = @LastLoggedOn " +
"WHERE Username = @username";
var date = DateTime.UtcNow;
DatabaseConnectionBase.DatabaseConnection.Execute(sql, new { username, LastLoggedOn = date });

我发现在实际更新之前中断时非常烦恼,日期变量显示为 30/3/2015 9:32:54 但是当我运行更新时数据库将日期保存为2015 年 3 月 30 日 10:32:54

由于英国昨天从 GMT 更改为 BST (UTC +1),我确信数据库似乎正在尝试对此进行补偿,因为这个问题以前从未出现过。

我认为我已经通过使用 DateTime.UtcNow 属性来保存我的日期避免了此类问题。

这会在验证用户时导致严重问题。

  • 我确定这不是我的代码,因为进入 Dapper Execute 方法的日期是正确的。
  • 我不明白为什么 Dapper 会尝试补偿,因为大多数开发人员都会对此类功能大喊大叫
  • 这让我得出结论,一定是 Sqlite 中的某些东西导致了这个问题。也许我需要运行一个编译指示?

根据另一个网站的建议,我尝试按如下方式格式化日期:

var date = DateTime.UtcNow.ToString("o");

目的是将日期强制转换为 ISO-8601 格式,但我没有成功。

有人有什么想法吗?

最佳答案

Thomas Levesque 有解决方案 here :

// You just need to specify DateTimeKind=Utc in your connection string:
string connectionString = @"Data Source=D:\tmp\testSQLiteDate.db;DateTimeKind=Utc";

关于c# - Utc 日期在 Sqlite 中保存为本地日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29343103/

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