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;
无论哪种方式,它的显示方式取决于您的 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
使用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;
无论哪种方式,它的显示方式取决于您的 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