GNU 날짜 에포크 + %s 대 타임스탬프 구문(월 포함)의 현재 계산?

GNU 날짜 에포크 + %s 대 타임스탬프 구문(월 포함)의 현재 계산?

쉘 스크립트에서 타임스탬프 문구와 함께 gnu 날짜를 사용하여 날짜 계산을 수행하려고 하는데 차이점을 설명할 수 없습니다. 누군가 나를 깨달을 수 있습니까? 이것은 버그입니까?

% date -u -d "now"
Fri Aug  2 15:07:16 UTC 2013

% date -u -d "1970-01-01 00:00:00 UTC  + `date +%s` seconds"
Fri Aug  2 15:07:29 UTC 2013

% date -u -d "now -6 months -1 day"
Fri Feb  1 15:07:52 UTC 2013

% date -u -d "1970-01-01 00:00:00 UTC  + `date +%s` seconds -6 months -1 day"
Tue Jan 29 15:08:03 UTC 2013

%s는 맨페이지에 "1970-01-01 00:00:00 UTC 이후의 초 수"로 정의되어 있으므로 마지막 항목이 이전 항목과 정확히 같은 의미일 것으로 예상했습니다.

답변1

작업 순서가 잘못된 것 같습니다. 이 명령을 실행하면 제대로 작동합니다.

$ date -u -d "$(date -u -d "1970-01-01 00:00:00 UTC  + `date +%s` seconds") \
     -6 months -1 day"

이것을 실행하면 이상한 결과가 나타납니다.

$ date -u -d "$(date +%s) seconds -6 months -1 day"
Sun Sep  3 07:48:54 UTC 2056

그러나 $(date +%s) seconds괄호로 보호하면 문제가 해결되는 것 같습니다.

$ date -u -d "($(date +%s) seconds) -6 months -1 day"
Fri Feb  1 15:55:12 UTC 2013

관련 정보