Subscribed unsubscribe Subscribe Subscribe

strftimeの0パディング抑止

strftimeで"%m"を指定すると月が取れるが、これはデフォルトで2桁に0パディングされる。

$ perl -MTime::Piece -E 'say localtime->strftime("%Y,%m,%d")'
2011,06,21

これを"6"のように0パディング無しで取る方法を調べてググったら結構でてきた。
glibc拡張により"%-m"という指定で0パディング無しに出来る、とのこと。大抵のLinux環境ならこれで可能みたい。

$ uname -srm
Linux 2.6.18-194.11.3.el5 x86_64
$ perl -MTime::Piece -E 'say localtime->strftime("%Y,%-m,%d")'
2011,6,21
$ ruby -e 'puts Time.now.strftime("%Y,%-m,%d")'
2011,6,21
$ python -c 'import datetime;print(datetime.datetime.now()).strftime("%Y,%-m,%d")'
2011,6,21
$ uname -srm
Darwin 10.7.0 i386
$ perl -MTime::Piece -E 'say localtime->strftime("%Y,%-m,%d")'
2011,-m,21
$ ruby -e 'puts Time.now.strftime("%Y,%-m,%d")'
2011,-m,21
$ python -c 'from datetime import datetime;print(datetime.now()).strftime("%Y,%-m,%d")'
2011,-m,21

手元のMac環境はダメ。。。ただしRuby 1.9.2だと大丈夫みたい。

$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ $HOME/.rvm/rubies/ruby-1.9.2-p180/bin/ruby -e 'puts Time.now.strftime("%Y,%-m,%d")'
2011,6,21

なんにせよ環境によって変わるのは気持ち悪いし、どうしても必要だったらアプリ側でそれ用の処理を用意すべきかなぁ…