アキラの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
Trackback URL: http://akira-site.net/cgi-bin/mt/mt-tb.cgi/409
コメント
コメントを投稿
カテゴリ「Perl」内の記事
サイト内検索
カテゴリ
- Linux
- Linux Tips [14]
- Linux ソフトウェア [3]
- Web技術
- (X)HTML/CSS [4]
- JavaScript [1]
- MovableType [7]
- その他 [3]
- 各種API [3]
- 各種ツール [4]
- Windows
- Win Tips [3]
- Win ソフトウェア [6]
- コネタ [7]
- プログラミング
- 機器 [4]