我有一张桌子用于存储带时区的iso日期。我意识到日期应该"永远"存储为utc但我对该规则有例外。时间戳不以任何方式与其运行的服务器相关。我希望能够存储这样的iso日期: 2016-03-06T01:15:52-06:00 无论服务器的时区或其他任何我想要的时间戳返回为: 2016-03-06T01:15:52-06:00
目前,如果我插入一个iso日期,它会自动将其转换为服务器时区。我的上述日期转换为: 2016-03-06 07:15:52 + 00(服务器是utc)
我唯一能想到的是将时区偏移存储在一个单独的列中,将我的日期存储为utc然后使用偏移列进行转换,非常混乱。当然,有一种方法可以将我的日期存储在一个列中,并按照最初创建的方式将其取出?
答案 0 :(得分:1)
您提出的解决方案是正确的。或者更确切地说,它是几个正确实现之一。以下任何一种都可以使用:
date
存储在一个字段中,并将time with time zone
存储在另一个字段中。 (虽然通常不鼓励time with time zone
...)迄今为止最简单的是你已经提出的第一个。
我避免在text
字段中存储时间戳,因为它们往往不能非常有效地搜索。
另请注意 - 如果您来自SQL Server后台,则可能会调用其datetimeoffset
类型,该类型在字段中存储本地日期时间和偏移量,并在索引期间使用UTC等效项。认为Postgres和MySQL的timestamp with time zone
具有相同的行为是很常见的,但他们不会这样做。他们只需使用会话时区转换为UTC或从UTC转换。 SQL Server没有会话时区的概念,因此存在差异。