• ベストアンサー

日付形式の変換

はじめまして Perlで日付形式の変換をしたいと思っています。 RFC1123形式(2 Mar 2006 04:28:25 -0800)から yyyy/mm/dd hh:mm:ssの形式に変換したいのです。 色々と調べましたが、適当なヒントがあるところがありません でした。 どうぞ、関連サイトでも構いませんので、ご回答お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

CPAN Date::Manip モジュールを使うといいかも ---------------------------------------------------------------- use Date::Manip; Date_Init("TZ=JST"); $RFC1123 = "2 Mar 2006 04:28:25 -0800"; $date = ParseDate($RFC1123); if( !$date){ print "error"; } else { print UnixDate($date,"%Y/%m/%d %H:%M:%S"); } #result>2006/03/02 21:28:25

papope
質問者

お礼

ご返事が遅くなり申し訳ありません。 回答あいりがとうございます。 私もCPANモジュールを探してみたんですが、この モジュールは見つけることができませんでした。 調べが甘いですね・・・・(汗) 本当に助かりました。 試して見ます。ありがとうございます。

その他の回答 (4)

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.4

# 微妙に違うバージョン。 use strict; my $rfc_date = '2 Mar 2006 04:28:25 -0800'; my %months = ("Jan"=>'01', "Feb"=>'02', "Mar"=>'03', "Apr"=>'04', "May"=>'05', "Jun"=>'06', "Jul"=>'07', "Aug"=>'08', "Sep"=>'09', "Oct"=>'10', "Nov"=>'11', "Dec"=>'12'); if (my @fulldate=$rfc_date=~/(\d{1,2})\s(\w{3})\s(\d{4})\s(\d{2}:\d{2}:\d{2}).+/){ my ($day,$month,$year,$time)=@fulldate; $day = "0$day" if length $day==1; my $date = "$year/$months{$month}/$day $time"; print "date=$date\n"; } # 出力: date= 2006/03/02 04:28:25

papope
質問者

お礼

ご回答、ありがとうございます。 正規表現は苦手なので勉強になりました。 ありがとうございます。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

ちょっと検索したら、こんなのが見つかりました。 HTTP::Date - 日付変換ルーチン 既に見られてるかもしれませんが。

参考URL:
http://homepage3.nifty.com/hippo2000/perltips/HTTP/Date.html
papope
質問者

お礼

ご回答ありがとうございます。 この頁は見ました。 使える!と思ったのですがモジュールのダウンロード頁への リンクが死んでたので、諦めました。 ありがとうございました。

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.2

# deagle さんのおっしゃったことを実行しただけですが・・・ use strict; my $rfc_date = '2 Mar 2006 04:28:25 -0800'; my %months = ("Jan"=>1, "Feb"=>2, "Mar"=>3, "Apr"=>4, "May"=>5, "Jun"=>6, "Jul"=>7, "Aug"=>8, "Sep"=>9, "Oct"=>10, "Nov"=>11, "Dec"=>12); if ($rfc_date=~/(\d{1,2})\s(\w{3})\s(\d{4})\s(\d{2}:\d{2}:\d{2}).+/){ my $date = "$3/$months{$2}/$1 $4"; print "date=$date\n"; }

papope
質問者

お礼

ご回答ありがとうございます。 わざわざ、例を掲載していただきありがとうございます。 私も一時期は正規表現で考えようかと思ったのですが・・・ でも、勉強になりました。 ありがとうございます。

noname#25358
noname#25358
回答No.1

 正規表現で分解して、月の名前だけ連想配列で置き換えるのが一番早いと思いますよ。  俺はそうしました。  yyyy/mm/dd hh:mm:ss 形式を time 関数の値に変換するロジックなら提供できますよ。

papope
質問者

お礼

ご返答が遅くなり申し訳ありません。 助かりました。 後のご回答にCPANモジュールのものを頂いたので、 そちらで試してみたいと思っています。 でも、助かりました。 ありがとうございました。

関連するQ&A