stefafafan の fa は3つです

"すてにゃん" こと id:stefafafan のブログです

strftimeのglibc拡張では日付0埋めなどを簡単に削れる

以前まで知らなかった小ネタを社外向けにも書いておきます。

普段の仕事で日付を扱う際、strftimeで文字列を組み立てることが多いのですが、その際にゼロ埋めをやめたいということがあった。てっきりstrftimeでは勝手にゼロ埋めするので、ゼロ埋めやめたいときは月の数字と日の数字を別々に分割して利用するしかないと思っていたのですが、strftimeのglibc拡張では元からこれに対応しているようでした。

man strftime

man コマンドを眺めると以下のように書いてありました。

%-*   GNU libc extension.  Do not do any padding when performing numerical outputs.

%_*   GNU libc extension.  Explicitly specify space for padding.

%0*   GNU libc extension.  Explicitly specify zero for padding.

つまり、 %m の代わりに %-m を使うとゼロ埋めがされていない状態にできるらしい。

手軽に試す方法

ターミナルでdateコマンドを使うと試せる。こんな感じでした。

$ date +%Y/%m/%d
2021/09/09

$ date +%Y/%-m/%-d
2021/9/9

$ date +%Y/%_m/%_d
2021/ 9/ 9

$ date +%Y/%0m/%0d
2021/09/09

番外編

上記のようなことを社内のグループウェアに書いたところ、strftime glibc拡張識者におすすめ情報を他にも教えていただけました。

複数のものをまとめてくれるFとかT
$ date +%FT%T
2021-11-22T13:09:33

%Y-%m-%dT%H:%m:%S よりシュッとしていて便利

コロンの数でタイムゾーンオフセットのフォーマットが変わる
$ date +%z%t%:z%t%::z%t%:::z
+0900   +09:00  +09:00:00       +09

!?