如何使用From_tz将当前时区转换为EST,使用偏移量转换为IST。此转换是否包括日间节能效果?
答案 0 :(得分:0)
如果您当前的时区为EST
,您可以执行以下操作:
SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', 'Asia/Calcutta') FROM dual;
否则,您首先必须转换为UTC
或EST
,即
SELECT
FROM_TZ(CAST(TIMESTAMP '2000-03-28 08:00:00' AT TIME ZONE 'EST' AS TIMESTAMP), 'Asia/Calcutta'),
FROM_TZ(SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 08:00:00'), 'Asia/Calcutta')
FROM dual;
注意,IST
不是Oracle中的有效时区名称,请参阅您自己的问题:How to convert time zones in oracle?
您可以使用功能SESSIONTIMEZONE
如果您想要加入它们,则必须使用完整的地区名称,例如: America/New_York
或Asia/Calcutta
。像+05:00
这样的时区偏移不包含任何夏令时效果。对于简称,它有所不同,例如EST
不使用DST,CET
不会。
为了获得“实时”偏移,您必须使用EXTRACT
函数:
SELECT
EXTRACT(TIMEZONE_HOUR FROM FROM_TZ(TIMESTAMP '2015-01-01 00:00:00', 'Europe/Berlin')) offset_winter,
EXTRACT(TIMEZONE_OFFSET FROM FROM_TZ(TIMESTAMP '2015-01-01 00:00:00', 'Europe/Berlin')) offset_winter,
EXTRACT(TIMEZONE_HOUR FROM FROM_TZ(TIMESTAMP '2015-07-01 00:00:00', 'Europe/Berlin')) offset_summer,
EXTRACT(TIMEZONE_OFFSET FROM FROM_TZ(TIMESTAMP '2015-07-01 00:00:00', 'Europe/Berlin')) offset_summer
FROM dual;
OFFSET_WINTER OFFSET_WINTER_1 OFFSET_SUMMER OFFSET_SUMMER_1
1 +00 01:00:00.000000 2 +00 02:00:00.000000