
나는 여러 가지 예를 보았습니다(이것을 포함하여우편) 충분히 간단해 보이지만 내가 뭘 잘못하고 있는지 잘 모르겠습니다. (포스트가 Linux용이라는 것을 알고 있지만 date
Linux 시스템에서 명령을 사용하여 시도했지만 거기에서도 동일한 결과가 나왔습니다.)
예제 명령 및 출력
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+7
과 days
같이 해석 됩니다 +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+4
는UTC-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+7
and 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
동일해야 합니다. 서로 다른 사용자는 서로 다른 시간대에서 동일한 문자열을 해석하며 실제로는 서로 다른 순간을 얻게 됩니다. 이런 의미에서 그들의 결과는 다릅니다. 같은 의미에서 그들의 입력은 다릅니다.