Oracle中如何处理夏令时变化?

问题描述 投票:0回答:1

我有一个表,供世界各地不同地方的多个用户使用,用户可以在其中存储项目的开始日期和时间。

假设我们于 2024 年 3 月在德国法兰克福。用户可能希望选择 5 月 1 日 8 点作为开始日期。

  • 当会话在 3 月 (GMT + 1) 时,开始日期将存储为时间戳:5 月 1 日 8:00

  • 现在,当时间向前推进,夏令时更改后(GMT + 2)进入五月时,日期显示为 5 月 1 日 9 点(这很正常)。

但这会给用户带来歧义。当用户说任务必须在 8 点开始时。它应该始终显示 8h。无论它何时插入以及我们所处年份的日期。

对于本例,用户应插入 5 月 1 日 07:00,以便在 5 月时,日期将显示 5 月 1 日 08:00。但这对于用户理解(以及开发)来说将非常复杂

有什么方法可以存储日期,例如它反映了当前和未来的正确时间?

我正在考虑将日期存储为字符,这样无论日期和一年中的时期如何,它总是以相同的方式显示。但这也太硬核了

谢谢。

oracle
1个回答
0
投票

将日期和时间存储为:

  1. TIMESTAMP WITH TIME ZONE
    ;或
  2. DATE
    TIMESTAMP
    (无时区)并确保日期/时间始终以 UTC 时区输入。

在这两种情况下,当您想要向用户显示日期和时间时,您可以从存储的时区转换为用户的本地时区。

您不应该将日期和时间存储为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.