【发布时间】:2011-12-27 08:13:37
【问题描述】:
我有一张桌子:
CREATE TABLE [Lines] (
[Value] TEXT NOT NULL,
[AddedOn] TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL
)
如您所见,AddedOn 列是一个时间戳,如果在插入时未提供,则设置为记录当前日期时间。
请考虑以下 c# 代码:
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO Lines(Value) VALUES (@Value)";
cmd.Parameters.AddWithValue("@Value", objectValue);
cmd.ExecuteNonQuery();
}
请注意,上面我让 SQLite 分配日期。现在,相同的代码,除了我传递了 AdditionalOn 值(例如 DateTime.Now - 现在)
using (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();
}
如果我然后比较这 2 个插入的结果,我发现当我让 AdditionalOn 默认启动时(第一个示例),它保存了 GMT 的当前日期时间。当我明确传递日期(第二个示例)时,它会将实际的当前日期时间保存在我的时区中。
这是设计使然吗?它是一个错误吗?看来行为应该是一致的,并且我传入的日期时间应该转换为 GMT。
【问题讨论】:
标签: c# sql sqlite datetime time