Perlで秒やミリ秒をタイムスタンプ(時分秒)に変換する方法

Perlで秒やミリ秒をタイムスタンプ(時分秒)に変換する方法

Posted at October 3,2014 12:33 AM
Tag:[Perl]

Perlで秒やミリ秒をタイムスタンプ(時分秒)に変換する方法を紹介します。

本エントリーはビギナーの方向けの内容です。

1.問題点

年月日を含んだ時分秒を変換するのはlocaltime()で行えます。

#!/usr/bin/perl
 
use strict;
 
my ( $sec, $min, $hour, $day, $mon, $year, $mday, $yday, $isdst ) = localtime( 1412249194 );
printf ("%04d/%02d/%02d %02d:%02d:%02d\n", $year + 1900, $mon + 1, $day, $hour, $min, $sec );

実行結果

2014/10/02 20:26:34

が、年月日がない場合の秒やミリ秒をタイムスタンプ(時分秒)に変換する方法が不明です。

たとえば「56475秒」は時分秒にすると「15:41:15」ですが、「56475」を上記のlocaltime()のパラメータに設定しても期待する結果は返却されません。

2.秒をタイムスタンプ(時分秒)に変換する

localtime()を使うとローカル標準時での時刻になってしまうため、協定世界時へ変換するgmtime()を使えば期待する結果が得られます。

#!/usr/bin/perl
 
use strict;
 
my ( $sec, $min, $hour, $day, $mon, $year, $mday, $yday, $isdst ) = gmtime( 56475 );
printf ("%02d:%02d:%02d\n", $hour, $min, $sec );

3.ミリ秒をタイムスタンプ(時分秒)に変換する

ミリ秒をタイムスタンプ(時分秒)に変換するには、gmtime()の前に「ミリ秒→秒」変換を行い、出力時にミリ秒を付与します。

#!/usr/bin/perl
 
use strict;
 
my $msec = 56475500;
my $sec = int( $msec / 1000 );
( $msec = $msec ) =~ s/^.*(\d{3})$/$1/;
my ( $sec, $min, $hour, $day, $mon, $year, $mday, $yday, $isdst ) = gmtime( $sec );
printf ("%02d:%02d:%02d.%03d\n", $hour, $min, $sec, $msec );

「ミリ秒→秒」は1000で割った整数、ミリ秒は単純に下3桁を取得するだけです。

関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)