Dateコマンドは12月31日の間違った週番号を提供します。

Dateコマンドは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

答え1

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

ISO州の日付システムは実際には輪廊カレンダーシステムであり、1988年から国際標準化機構(ISO)によって発行されたISO 8601の日付および時間標準(それ以前は2004年に最終改訂)として定義されました。 (R)1971年から2015年。 (主に)政府と企業の会計年度と時間の記録に使用されます。以前はこれを「産業日付エンコーディング」と呼んでいました。システムは、その年の序数主義のシンボルを定義してグレゴリオ暦の週を指定します。


ISO週番号年(非公式にISO年とも呼ばれる)は、52週または53週で構成されています。それは通常の365日または366日ではなく、364日または371日です。 ISO 8601ではこの用語を使用しませんが、追加のジュンジュとも呼ばれます。

毎週月曜日に始まります。年の各週は木曜日が属する年に属します。したがって、年の最初の週は常に1月4日を含みます。したがって、1月1日付近の特定の日付では、ISO記念日の数字がグレゴリオ暦とは若干異なります。


12/31を52週間で表示するには、%UISO規格を使用しないを使用する必要があります。

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

答え2

ヨーロッパと米国では、ISOとANSI規格の違いにより、週数の定義が異なります。これは、日曜日 - 土曜日、または月曜日 - 日曜日の週間に関連付けることができます。これは、週の日(安息日と日曜日)のユダヤ - キリスト教の定義に関連付けることができます。

ヨーロッパでは、1週目には1月の最初の木曜日が含まれているため、新年(木曜日 - 金曜日 - 土曜日 - 日曜日)に属する少なくとも4日(つまり、ほとんど)が含まれます。

とにかく、この期間中、ヨーロッパとアメリカの間には全州に+/- 1の違いがあり、これは多国籍企業のスケジュールに多くの喜びをもたらしました。 :-)

関連情報