気ままな一言
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; }
Posted by れむ at 11:35
│Tips
コメントありがとう♪
ねえレミさん
スクリプトショップ開けば?
ついでにうちの商品の
スクリプトも作って~ww
スクリプトショップ開けば?
ついでにうちの商品の
スクリプトも作って~ww
Posted by そうだら at 2008年06月14日 15:21
スクリプトだけ売っても楽しくないので
開きませ~ん。
簡単なものなら作っても良いですよ^^
開きませ~ん。
簡単なものなら作っても良いですよ^^
Posted by れむ
at 2008年06月16日 23:07

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