web-dev-qa-db-ja.com

日付コマンドが12月31日の間違った週番号を与える

12月31日の週番号を取得しようとすると、1が返されます。12月30日の週番号を取得すると、52が返されます---これは期待どおりです。月曜日が正しい日です。これは、Ubuntuを実行するRPI上にあります。

$ date -d "2018-12-30T1:58:55" +"%V%a"

52Sun

$ date -d "2018-12-31T1:58:55" +"%V%a"

01Mon

時間文字列なしの同じ問題

$ date -d "2018-12-31" +"%V%a"

01Mon
21
George Shafer

これで、月曜日から始まるISO週間が始まります。

ISOの週の日付システムは、1988年から国際標準化機構(ISO)によって発行されたISO 8601の日付と時刻の標準の一部であるうるう週のカレンダーシステムです(2004年に最後に改訂されました)。 ISO(R)2015(1971年以降)。会計年度の(主に)政府および企業で使用されるほか、計時にも使用されます。これは、以前は「工業用日付コーディング」と呼ばれていました。システムは、その年の通算週の表記法を定義することにより、グレゴリオ暦の上に週の年を指定します。


ISOの週番号の年(非公式にISO年とも呼ばれます)には、52週間または53週間があります。これは、通常の365日または366日ではなく、364日または371日です。 ISO 8601ではこの用語は使用されていませんが、余分な週はうるう週と呼ばれることもあります。

週は月曜日から始まります。毎週の年は、木曜日が入るグレゴリオ年です。したがって、年の最初の週には常に1月4日が含まれます。したがって、ISOの1年の番号付けは、1月1日に近いいくつかの日については、グレゴリオ暦からわずかにずれています。


12/31を52週として表示する場合は、ISO標準を使用しない%Uを使用する必要があります。

$ date -d "2018-12-31T1:58:55" +"%V%a"
01Mon
$ date -d "2018-12-31T1:58:55" +"%U%a"
52Mon
49
jesse_b

週番号の定義はヨーロッパとアメリカで異なり、おそらくISOとANSIの標準です。これは、日曜日-土曜日または月曜日-日曜日の1週間に関連している可能性があり、これもユダヤ人対キリスト教の主の日の定義(安息日vs日曜日)に関連している可能性があります。

ヨーロッパの場合、第1週には1月の第1木曜日が含まれるため、新しい年(木-金-日-日)に属する最低4日(つまり過半数)が含まれます。

とにかく、すべての(!!)週番号がヨーロッパとアメリカで+/- 1異なるような年には、多国籍企業でスケジュールを設定するのがとても楽しいです。 :-)

3
StessenJ