【发布时间】:2021-11-05 15:16:48
【问题描述】:
最近,一位同事提出了一个有趣的问题。创建一个 dateTime 对象,所有时间部分都为零。用dateAdd(...) 添加小时和分钟。这发生在 2021 年 10 月 31 日。夏令时在中欧结束。我们在服务器上观察到添加的时间比预期的少一小时,这意味着以下代码最终会打印时间戳{ts '2021-10-31 07:30:00'}。
<cfset dOct31 = createDateTime( 2021, 10, 31, 0, 0, 0 )>
<cfset dOct310800 = dateAdd( 'n', 30, dOct31 )>
<cfset dOct310800 = dateAdd( 'h', 8, dOct310800 )>
<cfdump var="#dOct31#">
<cfdump var="#dOct310800#">
我在TryCF 上运行此代码,并且在任何可用服务器上都没有发现此问题。我认为这可能是因为语言环境,但将 TryCF 代码设置为 German (Standard) 并没有改变任何事情。
哪些 (JAVA) 设置会影响此行为?我可以禁用此行为吗?这是一个令人不快的惊喜。
【问题讨论】:
-
CF 使用Calendar class 进行日期数学运算。该类使用 jvm 的默认 TimeZone,因此它知道 DST。由于计算跨越了 DST 边界,因此它包含了该日期的 -1 小时 DST 调整。 trycf.com 上的结果不同的原因是该服务器使用没有 DST 的 UTC 时区。 AFAIK,无法禁用该行为,您必须使用其他方法。
标签: coldfusion dst