私は日付をUnixタイムスタンプに変換する関数を書いています。この関数は、現在のDSTステータス(ESTまたはEDTなど)に関係なく機能します。これは関数です。mod_plsqlを使用しているときにタイムゾーン情報を取得できませんか?
function unix_time_from_date(in_date in date) return number
as
ut number := 0;
tz varchar2(8) := '';
begin
-- Get the local timezone from the passed in date
-- Assuming the date supplied is for the local time zone
select
extract(
timezone_abbr from cast(in_date as timestamp with local time zone)
)
into tz
from dual;
-- Get the Unix timestamp
select
(new_time(in_date, tz, 'GMT') - to_date('01-JAN-1970', 'DD-MM-YYYY')) * (
86400)
into ut
from dual;
return ut;
end unix_time_from_date;
この関数は、JDeveloperなどのクライアントから実行すると効果的です。私が収集したものから、これは、クライアントが最初のクエリにタイムゾーン情報を提供しているためです。しかし、mod_plsqlページから呼び出されたプロシージャ内から関数を使用すると、エラーORA-01857: not a valid time zone
が返されます。 tz
が'UNK'
に設定されているため、このエラーはnew_time
関数からスローされています。 、これはまだtz
が'UNK'
に設定された状態で失敗した場合を除き
function unix_time_from_date(in_date in date) return number
as
ut number := 0;
tz varchar2(8) := '';
begin
-- Get the local timezone from the passed in date
-- Assuming the date supplied is for the local time zone
select
extract(
timezone_abbr from cast(in_date as timestamp with local time zone)
)
into tz
from dual;
if tz = 'UNK' then
select
extract(
timezone_abbr from cast(sysdate as timestamp with local time zone)
)
into tz
from dual;
end if;
-- Get the Unix timestamp
select
(new_time(in_date, tz, 'GMT') - to_date('01-JAN-1970', 'DD-MM-YYYY')) * (
86400)
into ut
from dual;
return ut;
end unix_time_from_date;
:
だから、私はそうのように、この問題のための回避策を実施しました。誰でもここで起こっていることを知っていますか?関数がOracle Application Serverプロセスから呼び出されたときに、現地時間帯の短縮形を取得できないのはなぜですか?
OASサーバーでsqlplus経由でこれらのクエリを実行すると、Webページを処理するユーザーはエラーになりません。 –