日付コマンドで12月31日の週番号が間違っている


21

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

9
「日付コマンドで12月31日の週番号が間違っている」-「仕様が間違っている」あなたが使用している仕様は、マニュアルdateが使用していると言っているものと同じですか?
ヨルグWミッターグ


2
ルーマニアでMonthCalendarコントロールに間違った週番号が表示されるのはなぜですか?ブログの投稿はWindowsについてですが、議論されている問題は一般的なものです(そしてあなたが遭遇しているものと同じようです)。
CVn

1
「間違いなく間違いなかったので、コンピュータは間違っているに違いありません!」FORTRAN IVコンパイラにバグがなければならないと不平を言ったのを思い出します。これは、私の最初の単純なプログラムにエラーがなかったためです
...-RonJohn

回答:


49

これは、月曜日から始まるISO週を提供しています。

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


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

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


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

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

ありがとう。それが私が探していたものです。calコマンドでは、はるかに複雑な方法を使用しました。
ジョージシェーファー

3

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

ヨーロッパの場合、週番号1には1月の最初の木曜日が含まれているため、新しい年(木曜日から金曜日、土曜日)に属する最低4日間(過半数)が含まれています。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.