Oracle 如何使用带偏移量的From_Tz进行时间转换

Oracle 如何使用带偏移量的From_Tz进行时间转换,oracle,Oracle,如何使用From_tz使用偏移量将当前时区(如EST)转换为IST。此转换是否包括日光节约效果?如果您当前的时区是EST,您可以简单地执行此转换: SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', 'Asia/Calcutta') FROM dual; 否则,您首先必须转换为UTC或EST,即 注意,IST在Oracle中不是有效的时区名称,请参见您自己的问题: 您可以使用函数SESSIONTIMEZONE检查当前会话时区 如果您想将其包括在内,则

如何使用From_tz使用偏移量将当前时区(如EST)转换为IST。此转换是否包括日光节约效果?

如果您当前的时区是EST,您可以简单地执行此转换:

SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', 'Asia/Calcutta') FROM dual;
否则,您首先必须转换为UTC或EST,即

注意,IST在Oracle中不是有效的时区名称,请参见您自己的问题:

您可以使用函数SESSIONTIMEZONE检查当前会话时区

如果您想将其包括在内,则必须使用完整的地区名称,例如美洲/纽约或亚洲/加尔各答。时区偏移(如+05:00)不包括任何夏令时效果。对于短名称,它有所不同,例如EST不使用DST,但CET使用

为了获得有效偏移,必须使用提取功能:

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

谢谢,但是如果我能得到UTC偏移量和DST偏移量呢。我可以使用这些值操纵日期时间以进行适当的时区转换吗。如何在查询中实现这一点?
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