java CST/CDT时区更改问题
我们将时间存储为'22-NOV-17 05.33.51.937000000 PM'格式,服务器默认时区为CST。在许多地方,我们有一半的时间进行比较。所以CST到CDT和CDT到CST都面临问题,因为在数据库的检索时间上,我们无法识别时区。因此,它打破了我们对CST到CDT以及CDT到CST时间变化的时间比较
我们不能改变我们的存储逻辑,比如使用时区存储和UTC时区存储,因为这会破坏我们在许多地方的现有逻辑
那么,有没有办法识别日期时区,比如CST或CDT,它们存储在数据库中,格式为“2017年11月22日05.33.51.937000000 PM”
# 1 楼答案
你的评论没有道理
在Oracle数据库中,
TIMESTAMP
没有格式——它在数据库中存储为11个字节,表示年(2字节)、月、日、时、分、秒(每个字节1字节)和小数秒(4字节)。只有当您使用任何接口(SQL/Plus、SQL Developer、Toad、Java、PHP等)与数据库对话时,才决定将其显示给您,即用户,该接口才会将其格式化为字符串(但数据库只将其保留为字节,而不采用任何格式)假设您使用的是SQL/Plus或SQL Developer,那么您可以通过以下方式找到默认格式:
并使用以下命令更改默认格式:
或者
TIMESTAMP WITH TIME ZONE
不,如果没有任何其他元数据可以识别时间戳的来源并指出它来自哪个位置(即,是否有另一列链接到输入数据的用户,该数据可以映射到物理位置,从而映射到时区),那么就不可能确定它来自哪个时区
您需要:
TIMESTAMP WITH TIME ZONE
,并存储时区;或者