Эта проблема действительно связана с переходом на летнее время , но это не ошибка программы date
, а скорее «особенность»: все приведенные ниже команды вызывают ошибку, поскольку указанное время не существует в местном часовом поясе (который напрямую переходит от 01:59:59
к 03:00:00
).
$ date -d '02:00:00'
date: invalid date ‘02:00:00’
$ date -d '02:30:00'
date: invalid date ‘02:30:00’
$ date -d '+1 day 02:30:00'
date: invalid date ‘+1 day 02:30:00’
$ date -d '+2 day 02:30:00'
date: invalid date ‘+2 day 02:30:00’
, а две последние команды выше, безусловно, вызывают ошибку, поскольку программа date
попытки увеличить количество дней после разрешения указанного времени, которое действительно недопустимо.
Как я уже упоминал в своем комментарии, надежным способом обойти эту проблему могло бы стать использование UTC
часовой пояс (опция --utc
):
$ date -d 'today 01:59:59' -R
Sun, 29 Mar 2020 01:59:59 +0100
$ date -d 'today 01:59:59' '+%s'
1585443599
$ date -d 'today 02:00:00' '+%s'
date: invalid date ‘today 02:00:00’
$ date -d 'today 03:00:00' '+%s'
1585443600
$ date -u -d 'today 01:00:00' '+%s' # OK thanks to option -u
1585443600