"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が今日)