关于c#:使用带有Npgsql的时区的时间戳

Using timestamp with time zone with Npgsql

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

1
"UploadTime" timestamp with time zone

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

1
2
3
4
5
6
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"。 提前感谢任何解决方案。


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