Как coreutil date удается получать такие странные результаты?

Как coreutil date удается получать такие странные результаты?

Я экспериментировал с dateпопытками преобразовать выражения, например, «2 часа», в число секунд, например, 7200. Я думал, что смогу сделать это с помощью таких вызовов:

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

Однако при этом я заметил крайне странные результаты. (В моем /etc/timezoneслучае указано «Европа/Париж», отсюда и использование 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что это допустимая временная метка, в часовом поясе на 4 часа опережающем UTC).

Затем он видит слово «минуты» и воспринимает его как синоним слова «минута», поэтому вы получаете на одну минуту позже.

Если вы укажете явный спецификатор часового пояса, это сработает:

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

... но, по крайней мере, лично мне это читать гораздо сложнее.

Или вы можете поставить a Zпосле секунд и т. д. На самом деле вам не нужно TZустанавливать переменную окружения на UTC в приведенных выше примерах.

Связанный контент