アキラのITメモ:所望の日時のエポック秒を取得する

IT関係、技術関係のメモです。

所望の日時のエポック秒を取得する

Perlで所望の日時のエポック秒(ある日時の1970年1月1日午前0時0分0秒からの経過秒数)を取得したいけどどうやるのだろうと思っていたのですが、Time::Localモジュールにあるtimegsやtimelocalといったgmtimeやlocaltimeの逆関数を使えば取得できるようです。

まずはおさらいしておくと、time関数はエポック秒を、localtime関数はエポック秒を整形したものを、返してくれる関数です。使用例は以下の通りです。

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

上記のように記述すると、それぞれ$secに秒、 $minに分、$hourに時、$mdayに日、$monに月から1をひいたもの(0-11が返される)、$yearに年から1900をひいたもの、$wdayに曜日を数字に対応させたもの(日曜日が0で土曜が6)、$ydayに1月1日からの経過日数、$isdstにサマータイムかどうかのフラグ(サマータイム期間中は1、それ以外は0)が返って来ます。なお、gstime関数はエポック秒をグリニッジ標準時GMT(日本時間とは9時間差)に整形して返す関数です。

肝心のそれぞれの逆関数timelocalとtimegsですが、以下のような関数です。

use Time::Local;

$time = timelocal($sec,$min,$hour,$mday,$mon,$year);
$time = timegm   ($sec,$min,$hour,$mday,$mon,$year);

例えば、2007年1月1日00:00:00からの経過日数を知りたい場合は、以下のように記述すれば可能です。カウントダウンをするプログラム等にも応用できるでしょう。

use Time::Local;

#2007/01/01 00:00:00からの経過病数
$diff = time - timelocal(0,0,0,1,1-1,2007-1900);
print $diff;

ただし、関数に代入する際には、$monは0から11で表されるため該当する月から1をひいておく(例:3月の場合2)、$yearは1900年からの経過年数のため該当する年から1900をひいておく必要があります(例:2007年の場合107)。

カテゴリ: Perl 投稿日: 2007年01月01日 09:20
Trackback URL: http://akira-site.net/cgi-bin/mt/mt-tb.cgi/409

コメント

コメントを投稿





カテゴリ「Perl」内の記事

サイト内検索

カテゴリ

最近のエントリ

関連商品

アバウト

Atom RSS
Powered by MT3.33-ja
合計:total
今日:today 昨日:yesterday