我正在使用“带时区的时间戳记”列类型,并将日期时间设置为:
INSERT INTO mytable(col1)
VALUES(timestamp with time zone '2020-07-16 17:45:00.000000+00');
每当我尝试检索我的DateTime时,它们都将转换为“本地”类型。
这不是我想要的,将其设置为UTC日期时间,并且我希望将其恢复为UTC,我不希望将其转换为本地数据进入数据库,也不想将其返回...这样做使得无法到达UTC不会引起歧义。
我尝试设置“ PGTZ”环境变量;连接打开时,我还执行了以下sql:
Connection.ExecuteAsync( "SET TIMEZONE TO 'UTC'" );
根据各种帖子,我尝试过的任何东西似乎都没有效果,并且似乎是设计使然的:https : //github.com/npgsql/npgsql/issues/347
这对我来说似乎是完全错误的,但是我希望有人可以指出我的解决方法。
我正在使用.net5 / asp.net和Dapper(不是EFCore)和Npgsql版本4.1.5。
这确实是设计使然,并且在常规文本查询中查询timestamptz值时与PostgreSQL匹配。如果您使用启动psql或pgadmin并选择一个timestamptz列,您将根据TimeZone
会话参数看到本地时间戳。
如@ adrian-klaver所述,timestamptz并不是要在数据库中存储时区,而是要根据TimeZone
参数在将时间戳值读取和写入数据库时应用时区转换。如果您不希望进行任何此类转换,请考虑切换到时间戳(无时区),并按照惯例将所有时间戳都设为UTC。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句