揮発性のメモ2

http://d.hatena.ne.jp/iww/

日付フォーマットの変換

"Aug 2 17:34:10" を "2013-08-02 17:34:10" に変換する

DateTimeモジュール

http://ido.nu/kuma/2007/05/09/datetimeformat-summary/
によると、"Aug 2 17:34:10" は DateTime::Format::HTTP のフォーマットに近そう。
http://iandeth.dyndns.org/mt/ian/archives/000619.html
によると、"2013-08-02 17:34:10" は DateTime::Format::MySQL っぽい。
DateTime::Format::HogeHoge はCPANでインストールするらしいが、Debianなのでapt-getで勘で入れる。

apt-get install libdatetime-format-http-perl
apt-get install libdatetime-format-mysql-perl
#!/usr/bin/perl

use strict; use warnings;
use DateTime::Format::HTTP;
use DateTime::Format::MySQL;

my $timestamp = 'Aug  2 17:34:10';

my $dt = DateTime::Format::HTTP->parse_datetime( $timestamp );
my $str = DateTime::Format::MySQL->format_datetime( $dt );

print "$str\n";

parse_datetime() で日付文字列をパースしてDateTimeオブジェクトにする。
format_datetime() でDateTimeオブジェクトから日付文字列を生成する。

Time::Pieceモジュール

http://d.hatena.ne.jp/perlcodesample/20091105/1246274997 を参考に

#!/usr/bin/perl

use strict; use warnings;
use Time::Piece;
use Time::Seconds;

my $timestamp = 'Aug  2 17:34:10';

my $tp = Time::Piece->strptime( $timestamp, "%b %d %T" );
$tp += ONE_YEAR * (localtime->year -1970);
my $str = $tp->strftime("%F %T");

print "$str\n";

おなじみのstrptime()で日付を取り込む。
年が無いので今日の西暦を設定する(localtimeが今日)