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의 차이가 있었고, 이는 다국적 기업의 일정에 많은 즐거움을 안겨주었습니다. :-)

관련 정보