strftimeではまった

まぁPerlに限らないんだけど。


タイムスタンプから「2008年4月3日 9時27分6秒」みたいな文字列を作りたくてstrftimeを使ったんだが思いの他はまりまくったのでメモ。
perlだととりあえずstrftimeを使うのが普通だと思うので、記憶を頼りに適当に書式文字列を書いてみたら数字が一桁のときにゼロ埋めされてしまった。
ゼロはいらないんだけどなーと思ってドキュメントを見たら、どうもゼロ埋めかスペース埋めする書式しか見当たらない。


こんなときPHPだとstrftimeではなくてdateを使うとゼロ埋めしない書式があったりして、なんだよdateってstrftimeあるんだから似たようなもん作るなよこれだからPHPは……あれ、意外と助かるかも、みたいな。


それはさておき、strftimeのマニュアルをよく見てみるとprintfみたいに幅とかパディングの指定ができるとのことが書いてあった。
というわけで、早速こんなコードを書いてみたんだけどうまくいかなかった。

use POSIX 'strftime';
print strftime('%Y年%-m月%-d日 %-H時%-M分%-S秒', localtime), "\n";
2008年m月%-d日 H時%-M分%-S秒

こんな感じになってしまう(´・ω・`)
文字コードとかが影響してるのかと思って、色々変えてみたりしたんだが何をやってもダメ。


で、まぁ、結論としてはWindowsで実行してたのがいけなかった。
よく読まなかった自分も悪いんだがこの幅指定とかの拡張はglibcのものらしくて、Windowsでは使えないという罠だった。
Linux上で実行してみたら期待通りの表示になったよ!


ちなみに、Windowsの場合は-ではなくて#を指定するらしい。幅指定はできないぽい。


うーん、横着してWindowsで作業してたのがいけなかったか。


■参考
Download Visual Studio 2003 Retired Technical documentation from Official Microsoft Download CenterMSDN Library)