【发布时间】:2015-06-03 06:50:33
【问题描述】:
我有一个包含日期字段的 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 但是当我运行更新时,数据库将日期保存为30/3/2015 10:32:54
由于英国昨天从 GMT 更改为 BST (UTC +1),我确信数据库似乎正在尝试弥补这一问题,因为这个问题以前从未出现过。
我认为我已经通过使用 DateTime.UtcNow 属性来保存我的日期来避免此类问题。
这会在验证用户时导致严重问题。
- 我确定这不是我的代码,因为进入 Dapper Execute 方法的日期是正确的。
- 我不明白为什么 Dapper 会尝试补偿,因为大多数开发人员都会对此类功能大喊大叫
- 这使我得出结论,一定是 Sqlite 中的某些东西导致了此问题。也许我需要运行一个编译指示?
根据另一个网站的建议,我尝试将日期格式化如下:
var date = DateTime.UtcNow.ToString("o");
打算将日期强制转换为 ISO-8601 格式,但我没有这样做。
有人有什么想法吗?
【问题讨论】:
-
这个数据库到底在哪里?在你的本地机器上?还是其他服务器?您是否调试过代码并查看
DateTime.UtcNow究竟返回了什么? -
是的,我确实调试了我的代码,只要我能看到它,日期变量就会读取正确的 UTC 日期,直到它进入 Dapper Execute 方法。数据库在远程服务器上
标签: c# sql sqlite datetime dapper