2024년 3월 30일 이후에 어떻게 1일이 있을 수 있나요?

2024년 3월 30일 이후에 어떻게 1일이 있을 수 있나요?

나는 EU +1에 있거나 언제여름 시간활성화됨, +2. 2024년 3월 31일 일요일입니다. 이번 일요일 아침에는 일광 절약 시간제인 2→3(CET-4중앙 유럽 서머타임).

내 Linux 서버는 다른 네트워크에 있고 매월 마지막 날 23시 58분에 월별 에너지 소비량을 보고합니다. 그들은 수년간 완벽하게 일해 왔습니다. 네트워크 간 이동 시간은 최대 8시간입니다!

각 서버에는 하나의실시간 시계그리고 동기화NTP자주. 의심스러운 것이 있으면 각 네트워크에 있는 3개의 핵심 서버가 모든 것(시간 포함)이 괜찮은지 지속적으로 서로 확인하는 등 많은 안전 장치가 마련되어 있습니다. 네, 저는 편집증적이에요. 나는 (0) 오류를 허용하지 않습니다. 내 시스템은 수년 동안 완벽하고 안정적으로 실행됩니다. 일했어요, 미안해요.

어젯밤 3월 30일 23시 58분에 내 모든 Raspberry Pi 서버는 3월 30일을 다음 달 1일로 결정했습니다! 각 네트워크에 대해 7개의 서로 다른 독립적인 방법을 확인했는데 모든 일이 실제로 3월 30일 23:58분에 일어났습니다! 확인에는 DST를 무시하는 9개의 독립 장치와 외부 미국 및 EU 메일 공급자가 포함됩니다.

매일 23시 58분에 내 서버는 bash 테스트를 실행하지만 해당 테스트는 분명히 여러 가지 면에서 잘못될 수 있습니다.

(( $(date -d tomorrow +"%-d") == 1 )) && ZadnjiDanMjeseca=1 || ZadnjiDanMjeseca=""

이번 테스트에서는 아무 문제도 없는 것 같아요! 내가 틀렸기를 바랍니다. 지금 이 순간, 2024년 3월 31일. 모든 것이 잘 작동합니다. zdump가 맞습니다! (다음 예는 제가 보기에는 잘못된 것 같습니다. 4개의 다른 줄이 표시되어야 합니다.)

hwclock; date; date -d tomorrow +"%-d"
2024-03-31 19:22:23.311664+02:00
ned, 31.03.2024.  19:22:23 CEST
1

이 문제를 설명할 수 있는 유일한 방법은 내가 사용하는 Linux 배포판입니다.라즈베리 파이, 어쨌든 두 개의 독립적인 커널 함수 계산 시간이 있습니다. 안타깝게도 그 중 한 명은 올해가 윤년이라는 사실을 놓쳤습니다! UPS!

그렇다면 왜 이 Raspberry Pi OS 버전과 커널에만 제한되어 있습니까? 세상에, Microsoft는 Excel에서 윤년을 올바르게 계산하지 못했습니다!

이번 주말에 우리 나라의 여러 기관(은행, 주 세무서...)에 날짜 관련 문제가 있고 상점도 문을 닫는 것을 보았는데 이는 Raspbian에만 국한되지 않는 것 같습니다.

이것은 프로그래머로서 나에게 좋지 않습니다. 그러나 다른 설명을 찾을 수 없습니다. 내가 틀렸기를 바란다...

포스팅하기 전에는 1일 23시 58분에서 00시 3분으로 전환해서 말일 23시 58분에 데이터를 로그해야 해서 +1일을 요구하는 대신 300초를 추가해서 테스트를 했는데요. 이러한 솔루션은 효과가 있을 것입니다.

그래서 댓글에 숨겨져 있지 않습니다. 저는 그런 계산을 사용한 적이 없기 때문에 "내일"이 실제로 내일을 의미할 것이라고 기대하는 기본적인 실수를 저질렀습니다! 이것은 나에게 아무런 의미가 없습니다. 이는 +1일을 의미합니다. 따라서 나는 이 두 명령이 동일한 출력을 생성할 것으로 예상했습니다.

> date -d 'next tue'
uto,  2.04.2024.  00:00:00 CEST

> date -d 'tomorrow'
uto,  2.04.2024.  10:24:55 CEST

다음을 입력하는 대신:

date -d "tomorrow 0"

답변1

알겠습니다.

# date -s '2024-03-30 23:58'; date -d tomorrow
Sat Mar 30 23:58:00 EET 2024
Mon Apr  1 00:58:00 EEST 2024

2024-03-30 23:58 이후 24시간이니까 놀라운 일은 아닙니다.2024-04-01 00:58. 후자에만 일광 절약 시간이 적용됩니다.

설명서에 따르면:

관련 항목은 날짜를 앞이나 뒤로(또는 없는 경우 현재 날짜) 조정합니다. 관련 프로젝트의 영향은 누적됩니다.
[...]
더 정확한 단위는 [...]이고, "일"은 24시간에 해당하며,
[...]
문자열 "내일"은 미래의 1일에 해당합니다("일"에 해당). ,
[.. .]
관련 프로젝트로 인해 생성된 날짜가 시계 조정 경계(일반적으로 일광 절약 시간제)를 넘어가는 경우 생성된 날짜와 시간이 그에 따라 조정됩니다.

이 문제를 피하는 방법은 자정에 가깝지 않은 시간을 요청하는 것입니다.

예를 들어 정오가 일반적으로 올바른 요일입니다.

# date -s '2024-03-30 23:58'; date -d '+12 hours'
Sat Mar 30 23:58:00 EET 2024
Sun Mar 31 12:58:00 EEST 2024 

이것은 또한 작동하는 것 같습니다:

# date -s '2024-03-30 23:58'; date -d '12:00 tomorrow'
Sat Mar 30 23:58:00 EET 2024
Sun Mar 31 12:00:00 EEST 2024

관련 정보