ソラマメブログ
< 2024年04月 >
S M T W T F S
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

2009年11月02日

標準時間表示スクリプト(リンデンスクリプト Tips)

現在の日時をYYYY-MM-DD hh:mm:ssフォーマットで表示するスクリプトです。
Tips 13で日本標準時間を返すスクリプトをご紹介しましたが、今回のスクリプトは関数の引数に
GMTからの時差(h)を指定することにより、その地域の標準時間を返すことが可能です。
標準時間表示スクリプト(リンデンスクリプト Tips)

「スクリプト内容」
//
//    SHOP ZERO Tips42 RegionStandardTime Script   v1.0
//
//                   Created by Zero2000 Kid     2009/11/01
//                   
 
 
// GMT(Greenwich Mean Time)
integer GMT=0;
// JST(Japan Standard Time)
integer JST=9;
// PDT(Pacific Daylight Time)
integer PDT=-7;
// PST(Pacific Standard Time)
integer PST=-8;
 
string getRegionTime (integer offset) {
 
    string DateUTC = llGetDate();
    integer Region_hour;
    string DateToday = "";
    string timeToday = "";
 
    integer year = (integer)llGetSubString(DateUTC, 0, 3);
    integer month = (integer)llGetSubString(DateUTC, 5, 6);
    integer day = (integer)llGetSubString(DateUTC, 8, 9);
 
    integer now =(integer)llGetGMTclock(); 
    integer GMT_hour=now / 3600; 
    integer minute=(now % 3600) / 60;
    integer second=now % 60;
 
    if (offset>0) {
        if (GMT_hour<(24-offset)) {
            Region_hour=GMT_hour+offset;
        } else {
            Region_hour=GMT_hour-(24-offset);
 
            if (day == 31) {
                if (month == 12) {
                    year = year + 1;
                    month = 1;
                } else {
                    month = month + 1;
                }
                day = 1;
            } else if (day==30 && (month == 4 || month == 6 || month == 9 || month == 11)) {
                month = month + 1;
                day = 1;
            } else if (month==2) {
                if (!(year%400) || (year%100 && !(year%4))) {
                    if (day==29) {
                        month = month + 1;
                        day = 1;
                    } else {
                        day = day+1;
                    }
                } else {
                    if (day==28) {
                        month = month + 1;
                        day = 1;
                    } else {
                        day = day+1;
                    }
                }
            } else {
                day = day+1;
            }
        }
    } else {
        if (GMT_hour>=llAbs(offset)) {
            Region_hour=GMT_hour+offset;
        } else {
            Region_hour=24+GMT_hour+offset;
 
            if (day == 1) {
                if (month==1) {
                    year = year - 1;
                    month = 12;
                    day = 31;
                } else if (month == 3) {
                    month = month - 1;
                    if (!(year%400) || (year%100 && !(year%4))) {
                        day=29;
                    } else {
                        day=28;
                    }
                } else if (month == 5 || month == 7 || month == 10 || month == 12) {
                    month = month - 1;
                    day = 30;
                } else {
                    month = month - 1;
                    day = 31;
                }
            } else {
                day = day-1;
            }
 
        }
 
    }
 
    if(month < 10) {
        DateToday = "0";
    }
    DateToday+=(string)month + "-";
    if(day < 10) {
        DateToday += "0";
    }
    DateToday+=(string)day;
 
    if(Region_hour < 10) {
        timeToday = "0";
    }
    timeToday+=(string)Region_hour + ":";
    if(minute < 10) {
        timeToday += "0";
    }
    timeToday+=(string)minute + ":";
    if(second < 10) {
        timeToday += "0";
    }
    timeToday+=(string)second;
 
    return (string)year + "-" + DateToday + " " + timeToday;
 
}
 
 
default
{
 
    state_entry()
    {
        llSetTimerEvent(1.0);
    }
 
    on_rez(integer int) {
        llResetScript(); 
    }
 
 
    timer(){
        string gmt = "GMT(Greenwich Mean Time)\n" + getRegionTime(GMT);
        string jst = "JST(Japan Standard Time)\n" + getRegionTime(JST);
        string pdt = "PDT(Pacific Daylight Time)\n" + getRegionTime(PDT);
        string pst = "PST(Pacific Standard Time)\n" + getRegionTime(PST);
        llSetText(gmt+"\n"+jst+"\n"+pdt+"\n"+pst, <0.0, 1.0, 0.0>, 1.0);
    }
 
}
 
「使用方法」 1. オブジェクトを1つ作成します。(球でもボックスでも何でも構いません。) 2. オブジェクトにスクリプトをドラッグします。 以上です。 getRegionTimeの引数に各地域の時差(h)を指定することにより、その地域の 標準時間を表示します。 「スクリプトの説明」 llGetDate()及びllGetGMTclock()を使用して、現在の日時を取得しています。 llGetDate()は、UTCタイムゾーンの現在の日付を返す関数です。 llGetGMTclock()は、GMT午前0時から経過した秒数を返す関数です。 これらの関数から得た値を元にして、時差や閏年を考慮した時間を計算しています。 セカンドライフの時刻は、PST(サマータイム中はPDT)に基づいていますので、 getRegionTimeの引数に-8(サマータイム中は、-7)を指定するとSL時間と一致します。 日本であれば、GMTと9時間の差がありますので、引数に9を指定すると日本時間に 一致します。 [参考] リンデンスクリプトTips No.13 日本標準時表示スクリプト llGetDate llGetGMTclock llSetTimerEvent llSetText リンデンスクリプト Tips Indexへ



同じカテゴリー(リンデンスクリプトTips)の記事画像
サウンド再生スクリプト(リンデンスクリプト Tips)
カメラコントロール(リンデンスクリプト Tips)
プリムカウンター2(リンデンスクリプト Tips)
土地情報チェッカー(リンデンスクリプト Tips)
SIM負荷チェッカー(リンデンスクリプト Tips)
RSSリーダー(リンデンスクリプト Tips)
同じカテゴリー(リンデンスクリプトTips)の記事
 サウンド再生スクリプト(リンデンスクリプト Tips) (2009-12-16 20:13)
 カメラコントロール(リンデンスクリプト Tips) (2009-11-21 21:26)
 プリムカウンター2(リンデンスクリプト Tips) (2009-10-12 20:40)
 土地情報チェッカー(リンデンスクリプト Tips) (2009-10-11 21:33)
 SIM負荷チェッカー(リンデンスクリプト Tips) (2009-08-09 20:26)
 RSSリーダー(リンデンスクリプト Tips) (2009-02-02 19:38)
この記事へのコメント
こんにちはぁ。LSLCON2009ではお世話になりましたぁ。
ええと、余計なお節介なんですけど、スクリプトをブログに載せるときに、
http://lsl-users.jp/codehighlight/
ここを使うときれいに出せるので、おためしくださーい。
Posted by midori Paulse at 2009年11月02日 21:23
midoriさん

こんにちは^^
こちらこそお世話になりました。
これは便利ですねぇw
さっそく使わせてもらいました。
情報ありがとうございます;。
Posted by Zero2000 KiddZero2000 Kidd at 2009年11月07日 10:35
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。