[Perl] DateTimeモジュールで各国語表記の日付を表示

PerlのDateTimeモジュールを利用すると、「August」とか「日曜日」といった
各国語表記の月や曜日の文字列を簡単に取得することができる。
自前で [qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec )] みたいな
変換テーブルを持たなくて良いし、誤字の心配もないし、安心だ。
(その昔、ドコモのP503iでは、4月をAprでなくAplと省略する仕様があった)
さらに DateTime::Locale モジュールの full_date_format() メソッドを使えば、
「年-月-日-曜日」といった表示順も分かる。

use Encode;
use DateTime;
foreach my $lang (qw( de el en es fr ja nl no pl pt sv tr vi )) {
    my $fmt = DateTime::Locale->load($lang)->full_date_format();
    my $date = DateTime->now(locale => $lang)->strftime($fmt);
    my $line = "$lang : $date\n";
    print encode_utf8($line);
}

上記のサンプルコードを実行すると、以下のような各国語の表記が得られる。
de : Sonntag, 27. August 2006
el : Κυριακή, 27 Αυγούστου 2006
en : Sunday, August 27, 2006
es : domingo 27 de agosto de 2006
fr : dimanche 27 août 2006
ja : 2006年8月27日日曜日
nl : zondag 27 augustus 2006
no : sundag 27. august 2006
pl : niedziela, 27 sierpnia 2006
pt : domingo, 27 de agosto de 2006
sv : den 27 augusti 2006
tr : 27 Ağustos 2006 Pazar
vi : Chủ nhật, ngày 27 tháng tám năm 2006
※encode_utf8が必要なのは、miyagawaさんに教えてもらいました。

日本語での日付表記は、「2006年8月27日(日曜日)」の方がより自然だと思うけど、
DateTime::Locale モジュールの定義も自前でなくて、ICU の参照らしい。
原本はどこだろう?

(参考)
http://search.cpan.org/dist/DateTime/
http://search.cpan.org/dist/DateTime-Locale/

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

sino
2006年08月28日 12:10
例えば登録しておいた誕生日の3日前にメールで知らせる、ということをしたくて、DateTime モジュール使った記憶があります。今でも動いてるんだろうか、あのシステム。

この記事へのトラックバック