更改系统时区会将所有 time/date 数据转换为该时区吗?

Will changing the system timezone convert all the time/date data into that timezone?

我有一个购买日期为 1/1/2015 10:30 AM 的记录,我的系统时区是 UTC。 如果我将数据库时区更改为东部时间。现有记录的购买日期会自动转换为东部时间吗?例如,从 1/1/2015 10:30AM 到 1/1/2015 5:30PAM。 这是 Oracle 中的一个特性吗?

另外,请问有没有办法知道购买日期是在哪个时区记录的?

由于您的列的数据类型是 TIMESTAMP,Oracle 不知道时间戳所在的时区。即使您更改客户端或服务器上的时区,数据也不会更改。同样,也无法确定某个特定值是否旨在表示 EST、MST 或 UTC。显然,如果您知道所有数据都以 UTC 记录,则可以编写一个将数据转换为不同时区的更新语句。

如果您关心时区并希望进行时区转换,那么您确实希望将时区与日期一起存储在 TIMESTAMP WITH [LOCAL] TIME ZONE 列中。这使得将数据从一个时区转换到另一个时区变得更加容易。如果您使用 TIMESTAMP WITH LOCAL TIME ZONE,Oracle 会自动将数据转换为会话的首选时区,这允许不同的用户在他们的时区看到相同的数据,而无需操作数据库中的数据。