回答

收藏

使用SQLite的日期时间和.NET

技术问答 技术问答 214 人阅读 | 0 人回复 | 2023-09-12

我有一张表:
4 P3 a. y( E% }' K# A( CCREATE TABLE [Lines] ([Value] TEXT  NOT NULL,[AddedOn] TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL)如您所见,AddedOn列是一个时间戳,并设置为记录当前日期(如果插入时没有提供)。  T! E) m! R. _4 X3 r$ s: n
请考虑以下c#代码:( `) n& ~+ h) z' G1 A
using (var cmd = conn.CreateCommand()cmd.CommandText = "INSERT INTO Lines(Value) VALUES (@Value)";    cmd.Parameters.AddWithValue("@Value",objectValue);    cmd.ExecuteNonQuery();}请注意,我让上面SQLite分配了日期。现在,除了我要传递AddedOn值(例如,DateTime.Now-现在)以外,相同的代码
3 b9 z% x; X1 V3 [$ j+ Iusing (var cmd = conn.CreateCommand()cmd.CommandText = "INSERT INTO Lines(Value,AddedOn) VALUES (@Value,@AddedOn)";    cmd.Parameters.AddWithValue("@Value",objectValue);    cmd.Parameters.AddWithValue("@AddedOn",DateTime.Now);    cmd.ExecuteNonQuery();}然后,如果我比较这两个插入的结果,我会发现当我要求它们时,AddedOn默认插入(第一个示例)时,将当前日期保存在格林尼治标准时间。当我显式传输日期(第二个示例)时,它将实际当前日期保存在我的时区。
$ M; h7 H) k- w9 y. @: T( p这是设计造成的吗?是虫子吗?行为似乎应该一致,我传入的日期和时间应该转换为GMT。
# A' ?4 [- a! [/ U, F: a% }                                                               
9 r/ F* f! X4 h  C" v: @% x    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则