我的要求是需要将yyyy-MM-dd(用户输入值)格式的输入日期值转换为GMT,我们有自己的时区表,用于存储所有时区值。所以我们需要将输入值(yyyy-MM-dd)转换为GMT,因为我们只将值存储在GMT中。我已尝试使用FROM_TZ,CAST函数但未找到时区区域问题。 任何人都可以相应地建议更改。
这里附加了一些示例代码(这是用户输入值)。 在时区“GMT”的start_time> = to_date(to_char((from_tz(to_timestamp('2017-09-01','yyyy-MM-dd HH:MI:SS AM'),tz.offSet),'MM / dd / yyyy HH:MI AM'),'MM / dd / yyyy HH:MI AM')
谢谢, 桑特
答案 0 :(得分:0)
我在我的案子中这样做了:
-- returns a date value of a date converted in UTC and formated
cst_timestamp_fmt constant varchar2(20) := 'DD-MON-YY HH24:MI:SS';
function fn_Date_To_UTC_Formated(p_date date) return date is
begin
return to_date(to_char(
to_timestamp(
sys_extract_utc(
to_timestamp(
to_char(p_date,
cst_timestamp_fmt
),
cst_timestamp_fmt
)
)
),
'YYYY-MM-DD"T"HH24:MI:SS"Z"'
),
'YYYY-MM-DD"T"HH24:MI:SS"Z"'
);
end fn_Date_To_UTC_Formated;
并测试它:
declare
cst_timestamp_fmt constant varchar2(20) := 'DD-MON-YY HH24:MI:SS';
function fn_Date_To_UTC_Formated(p_date date) return date is
begin
return to_date(to_char(
to_timestamp(
sys_extract_utc(
to_timestamp(
to_char(p_date,
cst_timestamp_fmt
),
cst_timestamp_fmt
)
)
),
'YYYY-MM-DD"T"HH24:MI:SS"Z"'),'YYYY-MM-DD"T"HH24:MI:SS"Z"'
);
end fn_Date_To_UTC_Formated;
begin
dbms_output.put_line(' sysdate : '||to_char(sysdate, cst_timestamp_fmt));
dbms_output.put_line(' result : '||to_char(fn_Date_To_UTC_Formated(sysdate),cst_timestamp_fmt));
end;
结果是
sysdate : 20-SEP-17 15:20:09
result : 20-SEP-17 13:20:09
希望能有所帮助。