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字段解决了问题。