日付解析できない原因がわかった。

昨日のエントリーで Time::Pieceモジュールの strptimeメソッド
うまくいかない理由がわかりました。同時に解決方法もわかりました。


結論からいうと、 ロケールに問題がありました。昨日のうまくいかない
例をたどってみると曜日、月の解析ができないことがわかりました。


つまり %aで Sunが解析できない, %bで Octが解析できないなどです。
解析できるものだけ残して, strftime()を引数なしで呼び出されたときの
結果をみると

  % perl strptime.pl
  月, 01  1 2007 01:49:43 UTC

これからわかる通り、週の名前が漢字で書いた場合の頭文字となって
います。なので Monと書いたら認識してくれるのではなく, 月と書かない
といけないようです。


Time::Pieceの perldocをみたら ロケールの問題について記載されて
いました。ちゃんとみておくべきでした。しかしこの関数は Cライブラリを
直接読んでいるのでどうやったら解決できるのか根本的なことはわかって
いません。応急処置的な対応としましたは

  % LANG=C perl strptime.pl

のような具合にするというぐらいしかわかっていません。
ロケールについてもっと知る必要がありますね。