我正在使用查询从Oracle DB获取一些应用程序收到日期,该日期存储为GMT。现在我必须在检索时将其转换为东部标准/夏令时。 我正在使用以下查询:
select to_char (new_time(application_recv_date,'gmt','est'), 'MON dd, YYYY') from application
它适用于标准时间。但是对于夏令时,我们需要将其转换为' edt'基于时区信息。我不太清楚如何做到这一点。请帮帮我
答案 0 :(得分:10)
您可以使用此查询,而无需担心时区更改。
select to_char(cast(application_recv_date as timestamp) at time zone 'US/Eastern',
'MON dd, YYYY'
)
from application;
例如:
EDT:
select cast(date'2014-04-08' as timestamp) d1,
cast(date'2014-04-08' as timestamp) at time zone 'US/Eastern' d2
from dual;
D1 D2
---------------------------------- -------------------------------------------
08-APR-14 12.00.00.000000 AM 07-APR-14 08.00.00.000000 PM US/EASTERN
EST:
select cast(date'2014-12-08' as timestamp) d1,
cast(date'2014-12-08' as timestamp) at time zone 'US/Eastern' d2
from dual;
D1 D2
---------------------------------- -------------------------------------------
08-DEC-14 12.00.00.000000 AM 07-DEC-14 07.00.00.000000 PM US/EASTERN
更新:
感谢Alex Poole提醒,如果未指定时区,则使用本地时区进行转换。
要强制将日期识别为GMT,请使用from_tz。
from_tz(cast(date'2014-12-08' as timestamp), 'GMT') at time zone 'US/Eastern'
答案 1 :(得分:1)
在Oracle中,您可以使用以下查询来实现此目的:
Select current_timestamp, current_timestamp at time zone 'Australia/Sydney' from dual;
Australia/Sydney
是您要转换时间的时区名称。
答案 2 :(得分:0)
已经存在一个函数,可将所需列的时间从一个时区转换为另一个时区:-
convert_tz("columname or / the time you want to convert", fromTimeZone, ToTimeZone)
例如:- 我想将dateTIme列的时间从印度时间(IST)转换为巴西TimeZone,因为默认情况下印度的主机数据库时间是印度时间:-
convert_tz(dl.modified_datetime,'+ 5:30','-3:00')'modified_time'
因此,在此过程中,您可以轻松对其进行转换。