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桁を取得するだけです。
Posted by yujiro このページの先頭に戻る
- Perlでansibleライブラリを作成する方法
- perlのCPANモジュールからRPMを作成する方法
- Perlで「Subroutine permission redefined at~」を抑止する方法
- XML::Simpleのインストールでエラーになる場合の対処
- YAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処
- Perlの正規表現を使って文字列をまとめて取得する方法
- Perlのハッシュでキーの有無を調べる方法
- perlで配列の途中の要素を削除する方法
- YAML::Tinyでコロンを利用する方法
- Perlで改行コードがCRのファイルを読み込む方法
- Perlで「Possible precedence issue with control flow operator」という警告の対処
- PerlのLWPで「Can't verify SSL peers without knowing which Certificate Authorities to trust」というエラーになったときの対処
- Perl+Windowsでファイルを再帰的にリネームする方法
- Perlプログラムの中でファイルの一部を書き換える方法
- Perlの「Bareword "%s" not allowed while "strict subs" in use~」というエラーについて
トラックバックURL
コメントする
greeting