年の日(ユリウス日)を含む日付文字列を受け取り、それを別の形式に変換するbashスクリプトがあります。 %j
形式の文字は、ドキュメント(man date
およびman strftime
)で期待されるように文字列を解析していません。たとえば、私がこれを行うとき:
date -j -f "%Y %j %H %M %S" "2013 2 12 34 56" "+%a %b %d %T %Z %Y"
私は得る:
Sat Mar 09 12:34:56 UTC 2013
今日の日(Sat March 09
)が表示されるのはなぜですか?代わりにWed Jan 02
(2013年2日目)を表示するべきではありませんか?
他のフォーマットでも問題なく動作するようです。たとえば、これは次のとおりです。
date -j -f "%Y %m %d %H %M %S" "2013 01 02 12 34 56" "+%a %b %d %T %Z %Y"
正しくWed Jan 02 12:34:56 UTC 2013
を与えます。
どうしたの? %j
文字を正しく使用していますか? OS 10.10Yosemiteと10.11ElCapitanで同じ結果が得られます。
バグです。 /bin/date
の「%j」(年の日)セレクターが壊れています(少なくともOS X 10.10および10.11では)。 Apple(#30975711)にバグレポートを提出しました。
編集:OS X 10.12Sierraで修正されたようです。