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

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

date"2시간"과 같은 표현을 7200과 같은 초 수로 변환 하려고 합니다 . 다음 호출로 이 작업을 수행할 수 있다고 생각합니다.

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

그런데 이 작업을 수행하면서 매우 이상한 결과가 나타났습니다. (내 것에는 /etc/timezone"Europe/Paris"가 포함되어 있으므로 이를 사용하여 TZUTC 시간을 강제로 적용합니다.)

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그 뒤에 있는 초 필드를 참고하세요 . 두 번째 항목을 입력할 수도 있습니다 +0.

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

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

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

관련 정보