Bash date команда недействительная дата

В Linux Bash, когда я вхожу date -d "1986-01-01" это показывает ошибку

дата: недействительная дата "1986-01-01"

когда date -d "1986-01-02" оно работает

когда date -d "1987-01-01" это также работает

Зачем date -d "1986-01-01" показывает ошибку в оболочке Linux Bash.

Я использую Fedora 16

2 ответа

Решение

Непал изменил свой часовой пояс в начале 1986 года. Следующая таблица скопирована из пакета tzdata:

# Zone  NAME            GMTOFF  RULES   FORMAT  [UNTIL]
Zone    Asia/Kathmandu  5:41:16 -       LMT     1920
                        5:30    -       IST     1986
                        5:45    -       NPT     # Nepal Time

Это означает, что 1 января 1986 года время с 00:00:00 до 00:14:59 недействительно. Следующие две команды показывают, что первый день 1986 года начался с 00:15:00:

$ TZ=Asia/Kathmandu date -d '1985-12-31 23:59:59' '+%s'
504901799
$ TZ=Asia/Kathmandu date -d '1986-01-01 00:15:00' '+%s'
504901800

Так что сообщение об ошибке date верно. Дата недействительна в этом часовом поясе. Я не уверен, что вы делаете с результатом этой команды. Однако вы можете попытаться использовать UTC, потому что все даты действительны и однозначны в UTC:

$ TZ=UTC date -d '1986-01-01'
Wed Jan  1 00:00:00 UTC 1986

Я думаю, что вы используете алфавит "O" в верхнем регистре вместо числа "0" в команде:)

Другие вопросы по тегам