1

需要在数据库中保存带有时区的时间戳。表中的目标字段声明为

"UploadTime" timestamp with time zone

我正在使用命令参数插入数据:

var uploadTime = DateTimeOffset.Now;
var insertQuery = @"INSERT INTO ""Table"" (""UploadTime"") VALUES :uploadTime"; 
var uploadTimeParam = new NpgsqlParameter("uploadTime", NpgsqlDbType.TimestampTZ);
uploadTimeParam.Value = uploadTime;
var insertCommand = new NpgsqlCommand(insertQuery, databaseConnection);
insertCommand.Parameters.Add(uploadTimeParam);

值作为没有时区的 DateTime 存储和返回。我猜那是因为“带时区的时间戳”数据库类型默认映射到 DateTime。可能这可以通过检查源并对 TimestampTZ 进行相应的更改来解决,但它会干扰使用 Nuget 管理项目依赖项的想法。也许有一些不太复杂的方法可以实现这一目标?存储刻度并将它们转换为 DateTimeOffset 是一种开销,在我的情况下查询执行不起作用之前使用“SET TIME ZONE INTERVAL”破解。提前感谢任何解决方案。

4

1 回答 1

1

通过存储手动映射到 DateTimeOffset 的附加时间戳 RTT 字段解决了问题。

于 2013-03-05T07:47:32.920 回答