DBINFO('utc_to_datetime', â¦)
不是正确的工具
SELECT DBINFO('utc_to_datetime', 0)
FROM sysmaster:sysdual
产量:
1970-01-01 00:00:00
(至少,当服务器的时区通过
TZ=UTC0
SELECT DBINFO('utc_to_datetime', 1506107444)
FROM sysmaster:sysdual
2017-09-22 19:10:44
更改为服务器上的时区
例如:
DROP TABLE IF EXISTS datetime_values;
CREATE TABLE datetime_values
(
original DATETIME YEAR TO FRACTION(3) NOT NULL,
modified DATETIME YEAR TO FRACTION(3)
);
INSERT INTO datetime_values(original) VALUES('1970-01-01 00:00:00');
INSERT INTO datetime_values(original) VALUES('2017-09-22 12:31:46');
INSERT INTO datetime_values(original) VALUES('1066-10-21 14:20:04');
INSERT INTO datetime_values(original) VALUES('9989-01-20 00:00:00');
SELECT * FROM datetime_values;
UPDATE datetime_values
SET modified = original - INTERVAL(-5:30) HOUR TO MINUTE;
SELECT * FROM datetime_values;
1970-01-01 00:00:00.000
2017-09-22 12:31:46.000
1066-10-14 14:20:04.000
9989-01-20 00:00:00.000
1970-01-01 00:00:00.000 1970-01-01 05:30:00.000
2017-09-22 12:31:46.000 2017-09-22 18:01:46.000
1066-10-14 14:20:04.000 1066-10-14 19:50:04.000
9989-01-20 00:00:00.000 9989-01-20 05:30:00.000
有多种方法可以表示时区偏移。什么是最好的可能取决于您当前可用的格式。如果有一个表,其中列中的值是小时到分钟的间隔值,那么可能最简单的方法是为作业创建一个临时表。您可以处理字符串,或两个整数(小时和分钟),或一个整数(小时)(不处理印度(UTC+5:30)、尼泊尔(UTC+5:45)或纽芬兰(UTC-4:30)的时区)。
这变得非常棘手,非常迅速。在世界上的一些地区,关于在冬季和夏季之间切换的规则(我将使用该术语,虽然它不是特别标准,但夏时制在世界范围内不是标准的,除非美国软件迫使人们接受它)在大多数年里都会发生变化,有时是出于政治上的一时冲动,有时是因为观测农历和斋月等事件之间的相互作用。“奥尔森时区数据库”由IANA托管,位于
https://www.iana.org/time-zones
(又名
https://www.iana.org/tz
忽略在世界上某些地区更改冬季和夏季之间切换的定义的问题,您会遇到确定服务器使用的时区偏移的问题。有一个
DBINFO('get_tz')
SELECT DBINFO('utc_current'), DBINFO('get_tz'),
CURRENT YEAR TO SECOND
FROM sysmaster:sysdual
有一次,我运行了该查询并得到:
1506114539 UTC0 2017-09-22 21:08:59
date
,我可以分析:
$ /opt/gnu/bin/date -u -d @1506114539
Fri Sep 22 21:08:59 UTC 2017
$ /opt/gnu/bin/date -d @1506114539
Fri Sep 22 14:08:59 PDT 2017
$
这表明,自“新纪元”以来的秒数为1506114539,在UTC(GMT,或多或少)时区内,转换为2017年9月22日的21:08:59。美国/太平洋或美国/洛杉矶时区也是14:08:59,缩写为PDT(太平洋夏令时)。
确定Informix服务器中的差异(夏季或夏令时为7小时)很棘手。当处理其他时区偏移值中的时间时,情况更是如此,当处理凌晨01:00到02:00之间时钟“回落”的时间时,情况更是如此(无法判断时间值是使用冬季时区偏移还是使用夏季时区偏移存储的)。