date
"2시간"과 같은 표현을 7200과 같은 초 수로 변환 하려고 합니다 . 다음 호출로 이 작업을 수행할 수 있다고 생각합니다.
date -d "1970-01-01 00:00:00 + 2 hours" +"%s"
그런데 이 작업을 수행하면서 매우 이상한 결과가 나타났습니다. (내 것에는 /etc/timezone
"Europe/Paris"가 포함되어 있으므로 이를 사용하여 TZ
UTC 시간을 강제로 적용합니다.)
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 +4
UTC보다 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로 설정할 필요가 없습니다 .