はじめに

時間を取得するためのサブルーチンです。
$date の値を求め、それをマイレコードなどに記載する時などに用いています。

ソースコードの解説

sub get_time {
	$ENV{'TZ'} = "JST-9";

環境変数のTZ(タイムゾーン)に JST-9 を指定する。
ここは日本です日本時間してください、という部分です。
ただし国内のサーバーは明示的に宣言しなくても日本時間の場合がほとんど。

	($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time);

これは常套句ともいえる式で、左辺の配列に各種の日時等を代入しています。
localtime の実行結果と代入される値は、実は同じものではありません、詳細は後述。

	$year += 1900;

$year には1900年からの経過年数が代入されているので、1900年分を足す必要があります。

	@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');

$wday には曜日として 0~6 が代入されるので、上記配列により表示したい曜日のフォーマットをしています。

	$date = sprintf("%04d-%02d-%02d(%s)%02d:%02d:%02d",
		$year,$mon +1,$day,$week[$wday],$hour,$min,$sec);
}

sprintf 関数によって最終的な日付のフォーマットを決定しています。

localtime(1269530261);

とした場合、最終的には――

$date = '2010-03-26(Fri)00:17:41';

となります。

この $date の値が記載される具合です。

キーワード解説

localtime関数

  • localtime EXPR
    • EXPR … この値をローカル時間で返す。省略可能。

time関数 の値をローカル時間で返す関数。
EXPRを省略すれば現在時間に、1を代入すれば1970年から1秒経過した時間が返されます。

$a = time;
$b = localtime;
$c = localtime(time);
@d = ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime(time);

上記の場合――

$a = 1269530261;
$b = Fri Mar 26 00:17:41 2010;
$c = Fri Mar 26 00:17:41 2010;
@d = (41, 17, 0, 26, 2, 110, 5, 84, 0);

――という結果になります。

sprintf関数

  • sprintf(FORMAT, LIST)
    • FORMAT … フォーマットの指定。%m.nx と表す。
    • LIST … フォーマットを行うリスト値。

フォーマットされた文字列を返す関数。
m と n はサイズを表し、省略可能。
x はフィールドのタイプを表す。
面倒なので詳細は省略*smile*

%04d

であれば、4桁の10進数というフォーマットです。

また、浮動小数点の整数化については、こちらの関数を使うことが推奨されているようです。

関連項目

  • コラム

コメント

コメントはありません。 Comments/リファレンスマニュアル/サブルーチン/get_time?

お名前:

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-29 (日) 18:38:27 (142d)