使用带有Npgsql的时区的时间戳

时间:2013-02-06 12:02:28

标签: c# .net database npgsql postgresql-9.2

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

"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”。提前感谢任何解决方案。

1 个答案:

答案 0 :(得分:1)

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