显示 DATE 列的客户端本地时间
Posted: Sat Dec 07, 2024 4:06 am
在Oracle数据库中,该数据类型通常DATE用于日期和时间存储。只要所有客户端都位于同一时区,这通常不是问题,因为所有用户都有相同的时间。但是,如果您需要显示正确的时间(例如订单等)(例如网上商店),您该怎么办?
当然,这里最好的方法是简单地TIMESTAMP WITH TIMZONE切换到列,但这显然 香港电报号码数据 不仅会带来数据库的深刻变化,还会带来应用程序和界面的深刻变化。
如果唯一的要求是想要正确地将DATE中存储的时间信息输出到客户端,这当然更容易。
测试环境
该数据库在中欧(欧洲/维也纳时区)运行,因此也采用夏令时。为客户输出的时间当然还应该考虑到不同的夏令时规定。在示例中,我们假设纽约的客户想要获得正确的时间。
首先我们需要找出数据库所在的时区。这是使用 SQL 函数完成的DBTIMEZONE。
因此,数据库也配置为中欧(欧洲/维也纳时区)+1 小时。事实并非如此,因为 Oracle 默认使用 UTC (+00) 创建数据库。
以下查询使用两种变体将日期转换为客户端时间。为了方便读取时间TO_CHAR,我们使用会话设置NLS_DATE_FORMAT来显示日期和时间。
当然,这里最好的方法是简单地TIMESTAMP WITH TIMZONE切换到列,但这显然 香港电报号码数据 不仅会带来数据库的深刻变化,还会带来应用程序和界面的深刻变化。
如果唯一的要求是想要正确地将DATE中存储的时间信息输出到客户端,这当然更容易。
测试环境
该数据库在中欧(欧洲/维也纳时区)运行,因此也采用夏令时。为客户输出的时间当然还应该考虑到不同的夏令时规定。在示例中,我们假设纽约的客户想要获得正确的时间。
首先我们需要找出数据库所在的时区。这是使用 SQL 函数完成的DBTIMEZONE。
因此,数据库也配置为中欧(欧洲/维也纳时区)+1 小时。事实并非如此,因为 Oracle 默认使用 UTC (+00) 创建数据库。
以下查询使用两种变体将日期转换为客户端时间。为了方便读取时间TO_CHAR,我们使用会话设置NLS_DATE_FORMAT来显示日期和时间。