4

自从大约两周前开始夏令时以来,我们注意到在我们的新 ColdFusion 站点上以下列方式限制日期的任何查询都返回了不正确的数据(其中 StartDate 的格式为 dd-mmm-yyyy)。

select ...
from ...
where ...
  and o.booking_date >= date('#StartDate#')
  and o.booking_date < date('#StartDate#') + date('1 day') 

我们发现,如果 StartDate 更改如下,则返回正确的数据:

and booking_date >= '#DateFormat(DateAdd("d",-1,StartDate), "dd-mmm-yyyy")# 13:00'
and booking_date < '#DateFormat(StartDate, "dd-mmm-yyyy")# 13:00'

我们的 CF 服务器上的时间是正确的,并且设置为 UTC+10:00,并启用了夏令时的自动调整。Ingres II Visual Manager (II_TIMEZONE_NAME) 中的时间设置设置为 AUSTRALIA-VICTORIA。

我们使用 ColdFusion 10 通过 JDBC 连接到 Ingres 数据库。我们使用 ODBC 连接到 Ingres 数据库的旧 ColdFusion 4.5 服务器不会遇到这个问题,所以我认为我们遇到的问题一定与 ColdFusion 10 或我们现在使用的 JDBC 连接有关。

关于为什么会发生这种情况的任何想法?为什么在执行上面第一个示例中所示的操作时需要指定纯 UTC 日期/时间(即没有时间调整)?

谢谢。

4

1 回答 1

3

假设您使用的是最新版本的 Ingres,9.x 及更高版本,您可能必须将时区指定为连接属性/属性。例如,您可以将连接 URL 属性设置TZAUSTRALIA-VICTORIA,即

jdbc:ingres://..../mydb;TZ=AUSTRALIA-VICTORIA

如果 Coldfusion 支持 JDBC 属性,则属性名称为timezone,则 TZ/II_TIMEZONE_NAME 的值相同。

虽然 ODBC 和 JDBC 最终都通过相同的接口连接到 Ingres,但 JDBC 不知道服务器环境,因此不会观察到 II_TIMEZONE_NAME。

于 2012-10-18T13:57:33.970 回答