如何在Oracle SQL中显示日期和时间之后的CST或CDT?

kq0g1dla  于 2022-11-03  发布在  Oracle
关注(0)|答案(2)|浏览(279)

如何在日期和时间后显示CST或CDT,如下所示。
CDT时间2022年9月9日下午10:30:32

  • 谢谢-谢谢
2w3rbyxf

2w3rbyxf1#

TIMESTAMP '2022-09-09 22:30:32 US/CENTRAL'数据类型TIMESTAMP WITH TIME ZONE开始,然后使用TO_CHAR和格式模型'Mon DD YYYY HH12:MI:SS AM TZD'对其进行格式化:

SELECT TO_CHAR(
         TIMESTAMP '2022-09-09 22:30:32 US/CENTRAL',
         'Mon DD YYYY HH12:MI:SS AM TZD',
         'NLS_DATE_LANGUAGE=American'
       ) AS ts
FROM   DUAL;

输出:
| 技术支持|
| - -|
| CDT时间2022年9月9日下午10:30:32|
如果您有一个DATE,则将其转换为时间戳,并使用FROM_TZ为它指定US/CENTRAL时区,然后将其转换为字符串,如下所示:

SELECT TO_CHAR(
         FROM_TZ(
           CAST(
             DATE '2022-09-09' + INTERVAL '22:30:32' HOUR TO SECOND
             AS TIMESTAMP
           ),
           'US/CENTRAL'
         ),
         'Mon DD YYYY HH12:MI:SS AM TZD',
         'NLS_DATE_LANGUAGE=American'
       ) AS ts
FROM   DUAL;

它还输出:
| 技术支持|
| - -|
| CDT时间2022年9月9日下午10:30:32|
fiddle

u0njafvf

u0njafvf2#

试试这样的...

SELECT 
  To_Char(To_TimeStamp_TZ(To_Char(SYSDATE, 'Mon dd yyyy hh24:mi:ss'), 'Mon dd yyyy hh24:mi:ss ' || 'TZH:TZM'), 'Mon dd yyyy hh24:mi:ss ') ||
  CASE To_Char(To_TimeStamp_TZ(To_Char(SYSDATE, 'Mon dd yyyy hh24:mi:ss'), 'Mon dd yyyy hh24:mi:ss ' || 'TZH:TZM'), 'TZH:TZM') 
      WHEN '-05:00' THEN  'CDT'
      WHEN '-06:00' THEN  'CST'
      -- ... ...
      WHEN '+01:00' THEN  'CET'
      WHEN '+02:00' THEN  'EET'
      -- ... ... ...
  ELSE
      To_Char(To_TimeStamp_TZ(To_Char(SYSDATE, 'Mon dd yyyy hh24:mi:ss'), 'Mon dd yyyy hh24:mi:ss ' || 'TZH:TZM'), 'Mon dd yyyy hh24:mi:ss TZH:TZM')
  END "DTM"
FROM DUAL

....在我的情况下,结果是

--  DTM                       
--  ---------------------------
--  Oct 13 2022 19:19:03 EET

... OR如果我从case表达式中排除WHEN '+02:00'(强制结果到ELSE部分)

--  DTM                       
--  ---------------------------
--  Oct 13 2022 19:22:07 +02:00

有关To_TimeStamp_TZ()函数的更多信息,请访问:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions194.htm
时区定义位于:https://greenwichmeantime.com/time-zone/definition/
此致。

相关问题