날짜 계산이 예상된 결과를 제공하지 않음

날짜 계산이 예상된 결과를 제공하지 않음

나는 여러 가지 예를 보았습니다(이것을 포함하여우편) 충분히 간단해 보이지만 내가 뭘 잘못하고 있는지 잘 모르겠습니다. (포스트가 Linux용이라는 것을 알고 있지만 dateLinux 시스템에서 명령을 사용하여 시도했지만 거기에서도 동일한 결과가 나왔습니다.)

예제 명령 및 출력

me@mymachine~$ gdate -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02

나는 결과가 2019-10-26. 그러면 내 입력 내용을 구문 분석하지 않는 것 같죠?

(어쨌든 나에게) 더 이상한 점은 입력의 시간 부분을 제거하면 예상대로 작동한다는 것입니다.

me@mymachine~$ gdate -d '2019-10-19 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-26 00:00:00

답변1

분석

나는 Debian 9에서 몇 가지 테스트를 하고, 공부 man 1 date하고 info date, . 후자에는 다음과 같은 문자열 2019-10-19 01:37:02 +7 days이 해석되는 방식에 대한 자세한 정보가 포함되어 있습니다.

예비 참고사항:

  • 내 대답은 date이것이 데비안의 도구이기 때문에 사용됩니다. ( 매번 편집하지 않고 alias date=gdate명령을 테스트하는 데 사용합니다.)gdate
  • 귀하의 시간대는 대략 TZ=UTC+4.

나는 당신의 결과를 복제하려고 노력했습니다.

$ date -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 20:37:02

내 결과가 다릅니다. 이는 시간대가 중요함을 나타냅니다. 결과를 실제로 복제하려면 다음을 수행하십시오.

$ TZ=UTC+4 date -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02

설명

+7귀하의 "오작동" 명령은 다음 UTC+7days같이 해석 됩니다 +1 days. 비교하다:

$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+7 +1 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02

(참고 TZ=UTC+4UTC-04:00UTC+7문자열에 있는 동안은 다음을 의미합니다.UTC+07:00. 표지판과의 불일치가 설명됩니다.여기.)

신비한 결과는 이제 그다지 신비롭지 않습니다.


경구

정말 이상한 점은 다음과 같습니다.

$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-25 21:37:02

분명히 그것은 UTC+7and days(위와 같은 의미 +1 days)가 아니라 오히려 UTC(의미 UTC+0) and +7 days:

$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+0 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-25 21:37:02

해결책

+7 days하위 문자열을 시작 부분으로 이동하여 앞에 나타나도록 합니다 01:37:02. 이 방법은 다음 +7과 같이 해석되지 않습니다 UTC+7.

$ date -d '2019-10-19 +7 days 01:37:02' +"%Y-%m-%d %H:%M:%S"
2019-10-26 01:37:02

이제 01:37:02입력 문자열은 date올바른 것으로 간주되는 시간대에 따라 해석됩니다. 결과*는 유럽에 있는 나, 미국, 호주에 있는 동료 사용자 모두에게 동일해야 합니다. 이것이 내가 을 떨어뜨린 이유입니다 TZ=UTC+4. 더 이상 중요하지 않습니다.

*내 말은문자열인쇄된 내용은 date동일해야 합니다. 서로 다른 사용자는 서로 다른 시간대에서 동일한 문자열을 해석하며 실제로는 서로 다른 순간을 얻게 됩니다. 이런 의미에서 그들의 결과는 다릅니다. 같은 의미에서 그들의 입력은 다릅니다.

관련 정보