coreutil의 날짜는 어떻게 그런 이상한 결과를 얻습니까?

coreutil의 날짜는 어떻게 그런 이상한 결과를 얻습니까?

date나는 "2시간"과 같은 표현을 7200과 같은 초 수로 변환하려고 놀고 있었습니다 . 다음과 같은 호출을 사용하여 이 작업을 수행할 수 있다고 생각했습니다.

date -d "1970-01-01 00:00:00 + 2 hours" +"%s"

그런데 그렇게 하던 중 아주 이상한 결과를 발견했습니다. (My에는 "Europe/Paris"가 포함되어 있으므로 UTC 시간을 강제하기 위해 /etc/timezone를 사용합니다 .)TZ

omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"             
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s" 
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s" 
-3540

date첫 번째 결과는 충분히 합리적이지만, 마지막 세 가지 결과가 어떻게 나온 것인지 정말 궁금합니다 . 그 결과 사이의 논리를 이해하는 사람이 있습니까?

답변1

나는 그것이 + x시간대 지정자로 당신을 취하고 있다고 생각합니다 (예를 들어, 2013-04-25 19:52:36 +4UTC보다 4시간 빠른 시간대에 있는 유효한 타임스탬프를 고려하십시오).

그런 다음 '분'이라는 단어를 보고 이를 분과 동의어로 간주하므로 1분 후에 제공됩니다.

명시적인 시간대 지정자를 넣으면 다음과 같이 작동합니다.

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"   
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s" 
-60
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s" 
60

UTC초 필드 이후 를 참고하세요 . 1초를 넣을 수도 있습니다 +0.

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60

...하지만 적어도 개인적으로는 읽기가 훨씬 어렵습니다.

또는 초 뒤에 를 넣을 수도 있습니다 . 위의 예에서는 실제로 환경 변수를 UTC로 설정할 Z필요가 없습니다 .TZ

관련 정보