Oracle - 在 EST 中转换和显示 sysdate

Oracle - Convert and display sysdate in EST

使用oracle 11,如何在EST中转换和显示sysdate?
服务器位于 PST 位置

我试过这个:

select from_tz(CAST(sysdate AS TIMESTAMP),'EST') from dual
/

我没有得到正确的结果..

使用systimestamp而不是sysdate,因为它已经是时区感知的;然后 at time zone 翻译:

select systimestamp at time zone 'America/New_York' from dual

使用区域 better/safer 而不是像“EST”这样的缩写,这可能不是唯一的;并且 gives you the wrong answer - 这显示了我的,贾斯汀的替代(也许更好!)区域,什么you get with EST, all the things EST is an abbreviation of. (你可以用EST5EDT,但是一个区域还是比较清楚的。)

您还可以将会话设置为 East-coat 区域(如果尚未设置),然后使用 current_timestamp 而不是 systimestamp:

alter session set time_zone = 'America/New_York';
select current_timestamp from dual;

db<>fiddle

无论哪种方式,它的显示方式取决于您的 client/application - 例如会话 nls_timestamp_tz_format - 除非您使用 to_char() 将其转换为字符串,并提供您想要的格式。

使用 systimestamp,因为它包括时区。

select systimestamp at time zone 'US/Eastern'
  from dual;

应该return东部时区的时间戳(假设您的数据库时区文件是最新的)。

请注意,如果您要求使用 EST 时间戳,则该时间戳应比美国东部时区的当前时间早一个小时,因为美国处于夏令时。所以东部时区在 EDT 目前不是 EST。

如果你真的想使用SYSDATE那么你可以使用:

SELECT from_tz(CAST(sysdate AS TIMESTAMP),'PST') AT TIME ZONE 'EST5EDT' FROM DUAL;

输出:

| FROM_TZ(CAST(SYSDATEASTIMESTAMP),'PST')ATTIMEZONE'EST5EDT' |
| :--------------------------------------------------------- |
| 02-APR-21 11.07.33.000000 PM EST5EDT                       |

或:

SELECT from_tz(CAST(sysdate AS TIMESTAMP),'US/Pacific') AT TIME ZONE 'US/Eastern' FROM DUAL;

输出:

| FROM_TZ(CAST(SYSDATEASTIMESTAMP),'US/PACIFIC')ATTIMEZONE'US/EASTERN' |
| :------------------------------------------------------------------- |
| 02-APR-21 11.07.33.000000 PM US/EASTERN                              |

db<>fiddle here