我具有Users
类型为birthdate
列的timestamptz
表。PostgreSQL中的TIMEZONE
设置为UTC
。我在代码(.NET Core)中以以下方式设置birthdate
:
user.birthDate = DateTime.UtcNow;
如果我将TIMEZONE
设置为America\Los Angeles
并保存日期(.NET代码中的UTC表示,会发生什么情况?我的UTC
表示形式将被视为America\Los Angeles
,这将导致无效的数据表示形式?
我是否始终将TIMEZONE
设置为UTC
? timestamptz
是最佳做法吗?
https://www.postgresql.org/docs/12/datatype-datetime.html#DATATYPE-TIMEZONES说
所有可识别时区的日期和时间都存储在UTC内部。他们在TimeZone指定的区域中转换为本地时间配置参数,然后显示给客户端。
在客户代码中,您可以在会话级别更改时区参数;在数据库服务器级别使用timestamptz(带时区的时间戳),没有任何更改。