[英]How can I prevent a property from updating, which is marked as “UseNpgsqlIdentityAlwaysColumn()” using npgsql - postgresql
[英]How can you retrieve a UTC DateTime from Postgresql using Npgsql
我正在使用“带时区的时间戳”列类型并将我的日期时间设置为:
INSERT INTO mytable(col1)
VALUES(timestamp with time zone '2020-07-16 17:45:00.000000+00');
每当我尝试检索我的 DateTimes 时,它们都会被转换为“本地”类型。
这不是我想要的,它设置为 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 版。
Postgresql timestamptz
实际上并不存储时区,它只是存储 UTC 时的值。 这意味着'2020-07-16 17:45:00.000000+00'
不会在输入时转换为 UTC。 如果没有指定时区,它将从TimeZone
设置轮换到UTC
。 在检索时,它会使用TimeZone
设置旋转回该时区。 我怀疑您的设置没有发生在时间戳检索发生的同一会话中。 我会尝试类似SELECT timestamp_fld AT TIME ZONE 'UTC'
这确实是设计使然,并且在常规文本查询中查询 timestamptz 值时与 PostgreSQL 匹配。 如果您使用启动 psql 或 pgadmin 并选择一个时间戳列,您将看到基于您的TimeZone
会话参数的本地时间戳。
正如@adrian-klaver 所提到的,timestamptz 并不是将时区存储在数据库中——而是在基于TimeZone
参数将时间戳值读取和写入数据库时应用时区转换。 如果您不想要任何此类转换,请考虑切换到时间戳(不带时区),并按照约定将所有时间戳设为 UTC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.