web-dev-qa-db-ja.com

OS XでYYYYJJJから日付を変換しますか?

年の日(ユリウス日)を含む日付文字列を受け取り、それを別の形式に変換する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で同じ結果が得られます。

4
jt bullitt

バグです。 /bin/dateの「%j」(年の日)セレクターが壊れています(少なくともOS X 10.10および10.11では)。 Apple(#30975711)にバグレポートを提出しました。

編集:OS X 10.12Sierraで修正されたようです。

0
jt bullitt