【发布时间】:2014-11-06 09:23:07
【问题描述】:
我如何知道运行 DB2 的服务器是否配置了 DST?
CURRENT TIMEZONE 特殊寄存器为我提供了 UTC 和时间戳之间的差异,但这种差异可能会改变(夏季/冬季)。最后,我不确定服务器配置在哪个时区。
假设巴黎是格林威治标准时间 +1。夏季,CURRENT TIMEZONE 是 20000,因为 DST 处于活动状态,这意味着 2 小时。在冬季,当前时区指示 10000,这与 +1 GMT 完全对应。
我想检索当前时区的名称,我可以通过将时区的名称和值(存储在表中或函数内)与 CURRENT TIMEZONE 寄存器和 DST 进行匹配来实现。
但是我怎样才能得到夏令时呢?
【问题讨论】:
-
DB2 实例从操作系统获取时间和地区信息,包括夏令时状态,因此您基本上需要知道实例进程的
TZ环境变量的值。 -
但是如何从 DB2 获得?我正在考虑一个外部例程。
-
如果服务器的 DBA 没有提供功能,我怀疑您必须创建一个。您是否有可以讨论的特定用例?客户端和服务器之间的关系似乎是相关的。
-
外部例程可能是要走的路。这是一篇描述相关问题的旧文章,也许您可以从中得出一些结论:
http://www.ibm.com/developerworks/data/library/techarticle/dm-0407munteanu/ -
...这是一个常见的建议是让数据库(可能还有整个服务器)使用 UTC/GMT 的原因之一 - 没有 DST,没有偏移,没有奇怪的天数,纳达。 “本地时间”通常是记录事件的显示/呈现问题(当使用时间戳时),而不是域问题。此外,它还让您免于头疼 - 在更改后到 DST 发生时间进行任何翻译都是可怕的,您必须在规则更改发生时存储,并对存储的值执行数学运算。在传入参数上执行它并使用索引要好得多。
标签: datetime timezone db2 dst datetimeoffset