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

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

Posted at October 3,2014 12:33 AM
Tag:[Perl]
  • Hatena ブックマーク
  • del.icio.us
  • livedoor
  • Google Bookmarks
  • Yahoo!ブックマーク
  • POOKMARK Airlines
  • ニフティクリップ
  • Buzzurl
  • newsing it!

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
Zenback読み込み中です。
人気エントリー
トラックバックURL


コメントする
コメントするにはまずサインインしてください。
Loading...