Все остальные вопросы в сети SE касаются сценариев, в которых предполагается, что дата является now
( Q ) или указывается только дата ( Q ).
То, что я хочу сделать, это указать дату и время, а затем вычесть время из этого.
Вот что я попробовал первым:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
Это приводит к 2018-12-10 06:39:55
- Это добавило 7 часов. Затем вычитали 20:05 минут.
После прочтения man
и info
страницы date
, я думал, что это исправлено с этим:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
Но результат тот же. Откуда он вообще берет 7 часов?
Я пробовал и другие свидания, потому что думал, что в тот день у нас было 7200 високосных секунд, кто знает, лол. Но результаты те же.
Еще несколько примеров:
$ date -d "2018-12-16T00:00:00 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-17_02:00:00
$ date -d "2019-01-19T05:00:00 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-19_08:55:00
Но тут становится интересно. Если я опущу время на вводе, он работает нормально:
$ date -d "2018-12-16 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-15_00:00:00
$ date -d "2019-01-19 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-18_21:55:00
$ date --version
date (GNU coreutils) 8.30
Что мне не хватает?
Обновление: я добавил Z
в конце, и это изменило поведение:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
Я все еще в замешательстве, хотя. На информационной странице GNU о дате не так много об этом .
Я предполагаю, что это проблема часового пояса, но цитирую The Calendar Wiki на ISO 8601 :
Если информация о соотношении UTC не указана в представлении времени, предполагается, что время указано в местном времени.
Что я и хочу. Мое местное время также установлено правильно. Я не уверен, почему дата вообще мешает с часовым поясом в этом простом случае, когда я предоставляю дату и хочу вычесть что-то из этого. Не следует ли сначала вычесть часы из строки даты? Даже если он сначала преобразует его в дату, а затем выполняет вычитание, если я пропускаю любые вычитания, я получаю именно то, что хочу:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
Так что, если это действительно проблема с часовым поясом, откуда это безумие?