Apacheのログに出力される時刻の形式は
[19/Jun/2013:13:52:02 +0900]
のようになっている。
ログファイル – Apache HTTP サーバ
ドキュメントによると次のような形式とのこと。
[day/month/year:hour:minute:second zone] day = 2*digit month = 3*letter year = 4*digit hour = 2*digit minute = 2*digit second = 2*digit zone = (`+' | `-') 4*digit
さすがにDateTime.parse
に突っ込んでもパースできず。
pry> DateTime.parse('[19/Jun/2013:13:52:02 +0900]') ArgumentError: invalid date from (pry):12:in `parse'
Rubyのドキュメント探したけど、ぱっと見てみた限りではこの形式をそのままパースしてくれそうなメソッドはなかった。(あったら教えて下さいませ。)
なので、ひとつひとつ確かめながらDateTime.strptime
でパースしてみると、次のフォーマットでパースできることがわかった。
[%d/%b/%Y:%H:%M:%S %z]
pry> DateTime.strptime('[19/Jun/2013:13:52:02 +0900]', '[%d/%b/%Y:%H:%M:%S %z]') => #<DateTime: 2013-06-19T13:52:02+09:00 ((2456463j,17522s,0n),+32400s,2299161j)>
+0900
の部分をどう書くなかなか見つからなくて若干ハマった。
zoneだから%Z
じゃない?いや%z
かも。で、ビンゴ。
後から見つけたけど、DateTime.strptime, DateTime.strftime
に使用されるフォーマットについては下記のドキュメントが詳しい。
関連記事
- None Found