К сожалению, совершенно невозможно обернуть ваш мозг вокруг логики, которая определяет почти бесконечное множество форматов ввода даты , которые может обрабатывать команда date
. Тем не менее, очень впечатляет, что им удается делать это так хорошо! Особенно, когда вы понимаете множество форматов даты и времени, которые придумало человечество.
То, что вы обнаружили, это то, что называется военные часовые пояса , еще одна форма написания даты-времени, но организованнаяодин. Поэтому, когда вы просите date
преобразовать «2019-10-07S», он примет «2019-10-07T00: 00: 00» в часовом поясе Сьерры (UTC-6). Следовательно, ваш результат должен быть «2019-10-06T18: 00: 00 UTC». Тем не менее, вы получаете «2019-10-07T02: 00: 00», что не то же самое. Это потому, что date
возвращает строку формата в вашем местном часовом поясе и сообщает мне, что в настоящее время ваша система настроена на UTC + 8.
Мы можем проверить это как:
$ TZ="Australia/Perth" date -d "2019-10-07S" "+%FT%T %z %Z"
2019-10-07T02:00:00 +0800 AWST
$ TZ="UTC-8" date -d "2019-10-07S" "+%FT%T %z %Z"
2019-10-07T02:00:00 +0800 UTC
Примечание: Имейте в виду, что TZ="UTC-8"
на самом деле означает UTC + 8. Эта запись интерпретируется как часовой пояс Posix. (См .: U & L: почему TZ = UTC-8 производит даты с UTC + 8? )