ソラマメ ブログ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 4人
オーナーへメッセージ
QRコード
QRCODE

気ままな一言

ご質問等、ページへのリンクはご自由に。気軽にコメントでもどうそ~
詳しいことは角川SIMのサポートセンターまでいらっしゃいませっ

世間知らずなので逆にいろいろ教えてください♪

2008年06月14日

LSL汎用関数 その4

さて、ネタが尽きてきました。今回はまだ使える関数です。
時刻関連の関数は標準であるといいのですが。

誰か良い時計でも作られたら私に下さい(笑)


//==============================================================================
//  Unixタイムをグレゴリオ暦に変換します。
//  time    Unixタイム
//  diff    時差
//  戻り値  [ 年, 月, 分, 時, 分, 秒 ] のリストを返します。
//==============================================================================
listunixtime2list(integer time, integer diff)
{
    time += 57974400 + diff * 3600;  // 24 * 60 * 60 * (365 + 306)
    integer n = time / 86400;        // 24 * 60 * 60
    integer day = n % 1461;          // 365 + 365 + 365 + 366
    integer year = n / 1461 * 4 + 1968;

    if (day >= 1095) {
        day -= 1095;
        year += 3;
    } else if (day >= 730) {
        day -= 730;
        year += 2;
    } else if (day >= 365) {
        day -= 365;
        ++year;
    }

    integer month = 3;
    n = 31;
    list lst = [ 0, 0, 0, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 29 ];
    while (day >= n) {
        day -= n;
        n = llList2Integer(lst, month);
        month = -(~month);
    }

    if (month > 12) {
        ++year;
        month -= 12;
    }

    return [ year, month, day + 1, time / 3600 % 24, time / 60 % 60, time % 60 ];
}

【使用方法】
list lst = unixtime2list(1199145600, 0);      // lst = [ 2008, 1, 1, 0, 0, 0 ]
list lst = unixtime2list(llGetUnixTime(), 9); // lst = JST(日本時間)


//============================================================================== // 日付をUnixタイムとして取得します。 // year 年(1970~2038) // month 月(1~12) // day 日(1~31) // hour 時(0~) // minute 分(0~) // second 秒(0~) // 戻り値 Unixを返します。範囲外の値は保障外です。 //============================================================================== integer maketime(integer year, integer month, integer day, integer hour, integer minute, integer second) { if (month < 3) { month += 12; --year; } year = (year * 365 + llList2Integer([ 0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337 ], month - 3) + day) + llFloor(year / 4) - llFloor(year / 100) + llFloor(year / 400); return (year - 719469) * 86400 + (hour * 60 + minute) * 60 + second; } 【使用方法】 integer time = maketime(2008, 1, 1, 0, 0, 0); // time = 1199145600
// 曜日の戻り値はISO-8601形式準拠よりこの方が使いやすいよね……多分。
//============================================================================== // 曜日を求めます。 // 有効な範囲はグレゴリオ暦1582年10月15日以降です。 // year 年(西暦) // month 月 // day 日 // 戻り値 曜日を(日曜日…0 ~ 土曜日…6)で返します。 //============================================================================== integer dayofweek(integer year, integer month, integer day) { if (month < 3) { --year; month += 12; } return (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7; } 【使用方法】 integer n = dayofweek(2008, 1, 1); // n = 2 string str = llList2String([ "日", "月", "火", "水", "木", "金", "土" ], dayofweek(2008, 1, 1)); // str = "火" MEMO [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ] [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ] [ "Dimanche", "Lundi", "Mardi","Mercredi", "Jeudi", "Vendredi", "Samedi" ]
//============================================================================== // 現在の曜日を求めます。 // diff 時差 // 戻り値 曜日を(日曜日…0 ~ 土曜日…6)で返します。 //============================================================================== integer get_dayofweek(integer diff) { return (llFloor((llGetUnixTime() + diff * 3600) / 86400) + 4) % 7; } 【使用方法】 integer n = get_dayofweek(9); // 日本時間の今日の曜日
おまけ
//============================================================================== // 西暦を和暦に変換します。 // year 西暦 // 戻り値 和暦を返します。範囲外は空リストを返します。 // [ 1 明治 / 2 大正 / 3 昭和 / 4 平成, 年数, 年号 ] //============================================================================== list to_wareki(integer year) { if (1989 <= year) { return [ 4, (year - 1988), "平成" ]; } else if (1926 <= year) { return [ 3, (year - 1925), "昭和" ]; } else if (1912 <= year) { return [ 2, (year - 1911), "大正" ]; } else if (1868 <= year) { return [ 1, (year - 1867), "明治" ]; } return []; } //============================================================================== // 和暦を西暦に変換します。 // 実際に存在しない場合も計算されます。 // n 1 明治 / 2 大正 / 3 昭和 / 4 平成 // year 和暦 // 戻り値 西暦を返します。nが正しくない場合はyearを返します。 //============================================================================== integer from_wareki(integer n, integer year) { return llList2Integer([ 0, 1867, 1911, 1925, 1988 ], n) + year; }


同じカテゴリー(Tips)の記事画像
LSLを便利に書こう
同じカテゴリー(Tips)の記事
 lslint へ関数を追加 (2009-03-24 02:08)
 LSL汎用関数 訂正 (2009-03-04 01:26)
 SLサーバーの環境変数 (2008-08-12 21:51)
 LSL汎用関数 その3 (2008-05-29 19:12)
 LSLを便利に書こう (2008-05-04 19:46)
 LSL汎用関数 その2 (2008-04-01 13:54)
Posted by れむ at 11:35 │Tips
コメントありがとう♪
ねえレミさん
スクリプトショップ開けば?
ついでにうちの商品の
スクリプトも作って~ww
Posted by そうだら at 2008年06月14日 15:21
スクリプトだけ売っても楽しくないので
開きませ~ん。

簡単なものなら作っても良いですよ^^
Posted by れむれむ at 2008年06月16日 23:07
お、やった~w
え~と、何作ってもらおうかな?
うーん、
今思いつかないから
思いついたときにお願いしますww
Posted by そうだら at 2008年06月17日 17:38
何でも言ってください^^
Posted by れむれむ at 2008年06月19日 13:09