【问题标题】:How to add or subtract timezone offset to timestamp如何将时区偏移添加或减去时间戳
【发布时间】:2014-03-18 00:02:28
【问题描述】:

我正在编写一个程序,从数据库中获取时区偏移量,我的要求是使用时区偏移量来操作本地时间以获取 UTC 时间。

例如,

If local time is   : 2/3/2013 2:05:53.000000 PM 
timezone offset is : 5:30
Output should be   : 2/3/2013 8:35:53.000000 AM (2/3/2013 2:05:53.000000 PM - 5:30)

任何人都可以帮助我为此提供适当的功能。

【问题讨论】:

    标签: oracle oracle11g timezone timezone-offset timestamp-with-timezone


    【解决方案1】:

    您可以使用FROM_TZ 形成一个TIMESTAMP WITH TIME ZONE 值 通过结合 TIMESTAMP 和 TIME ZONE。接下来,使用SYS_EXTRACT_UTC 将其转换为 UTC 时间。

    SQL> select from_tz(timestamp'2013-02-03 14:05:53','05:30'),
                sys_extract_utc(from_tz(timestamp'2013-02-03 14:05:53','05:30'))
         from dual;
    
    FROM_TZ(TIMESTAMP'2013-02-0314:05:53','05:30')    SYS_EXTRACT_UTC(FROM_TZ(TIMESTAMP'2013-02-0314:05:53','05:30'))
    ------------------------------------------------- -----------------------------------------------------------------
    03-FEB-13 02.05.53.000000000 PM +05:30            03-FEB-13 08.35.53.000000000 AM
    

    【讨论】:

    • 感谢您的回复@Eat A Peach,但在给定的示例中,它正在减去时区偏移量,但在查询中显示它正在添加..有点困惑
    • 得到了结果输出.. 感谢您的回答
    • +5.30 表示,时间比 UTC 早五个半小时。因此,在印度的下午 2.05 点(+5.30 tz),英国的时间(UTC 时区)将是上午 8.35 点
    【解决方案2】:

    使用Datetime Expressions,您可以做到更通用:

    SELECT FROM_TZ(TIMESTAMP '2013-02-03 14:05:53', '05:30') AT TIME ZONE 'UTC' 
    FROM dual;
    

    SELECT (TIMESTAMP '2013-02-03 14:05:53' AT TIME ZONE '05:30') AT TIME ZONE 'UTC' 
    FROM dual;
    

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2014-04-25
      相关资源
      最近更新 更多