PDTとPST | Aqua Shop Gonbe(SL)日記

PDTとPST

Gonbeが使っているLucky Board(LB)とかITEM CAMPとかマルチベンダーとか・・・その他色々なアイテム類も大部分が自作品です。^^


まあLSLの中級者レベルであれば、これらを自作する事は難しくないと思います。

実現すべき機能が分かっているのですからね。


ところで、これらに関しては、最近は事前に設置して、指定日時になると自動的にアクティブになり、指定期間を過ぎると自動的にクローズされるようにしています。

その方が設置でバタバタしないで済みますからね。。。^^;


この指定期間に関してですが、当初は日本標準時間(JST)を使う事が多かったです。

しかし最近はSL時間を使う事が多いです。

まあ、どちらでも良いようには作ってますが・・・


で、このSL時間ですが・・・


ご存知のとおりPDTとPSTが有ります。

PDTとは「太平洋夏時間(Pacific Daylight Time)」です。

PSTとは「太平洋標準時(Pacific Standard Time)」です。


PDTとPSTでは1時間違います。

PDTは「3月の第2日曜日午前2時から11月の第1日曜日午前2時までの期間」だそうです。


SLでもこの切り替えは行われています。

そこで問題が出ます。


例えば2010年12月18日~25日(SL時間)とした場合、日本時間ではPDTなら18日の午後4時~になりますし、PSTなら午後5時~になります。


スクリプトの内部的には、協定世界時(UTC - Universal Time, Coordinated)で現在の年月日時刻を取得しています。

PDTならUTC-7時間。

PSTならUTC-8時間。

になります。

ちなみに日本標準時はJST(Japan Standard Time)で、UTC+9時間になってます。


で、話を戻して、今はPDTなの?PSTなの?と言うのが分からないと、12月18日の午前零時が分からない事になってしまうのです。


LSL関連で、この辺を扱う関数は以下のようになります。

llGetDate():現在のUTC日付を返す。戻り値の形式はYYYY-MM-DDである。

llGetTimestamp():現在時刻(多分UTC)を返す。形式は"YYYY-MM-DDThh:mm:ss.ff..fZ"である。
llGetWallclock():サーバーのローカル時刻(0時からの経過秒数)を得る。この関数で得られる時間は、SLクライアントに表示されているPST/PDTに等しいようだ。


Gonbeは、この中ではllGetTimestamp()で、現在の年月日時刻(UTC)を取得して、日本時間なら+9時間。PDTなら-7時間と言う具合に計算して求めています。


今までは、PDTとPSTは内部では判断しないで、「あ~もうPDTに変わっているから、-7時間にして動かそう・・・」てな感じでやってました。

でも、今回llGetWallclock()を使って、今がPDTか?PSTか?の判断ができるように改良してみました。


その式を書くと、以下のようにしました。


integer diff_h=(integer)llGetWallclock()/3600 - (integer)llGetSubString((string)llGetTimestamp(),11,12);


これはサーバーのローカル時刻(秒)からローカル時を計算し、UTCでの現在時を取得して引いた差を求めています。


このdiff_hが-7か+17の場合はPDTの状態です。

それ以外はPSTです。(-8か+16になる)


+17になってしまうのは、日付が1日違うからです。

実際は17時-24時=-7時となって、-7時間で同じになります。


これでスクリプト内で、現在はPDTだからUTCから-7時間引いた時間で計算すれば良い・・・と判断できるようになりました。


う~ん。。。ややこしいな。。。-。-;

まあ、自分の覚書だから良いか。^^