$ date -d "Apr 1 2016 - 1 month" +%B
дает мне «март», и это здорово - месяц, предшествующий апрелю, - март. Если я сделаю это, однако:
$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
это дает мне "февраль". Это вызывает ошибку в более сложном коде, который у меня есть. Почему эти 2 команды показывают разные результаты?
March
Ответы:
Вы можете увидеть проблему, включив трассировку оболочки:
Когда вы используете выходные данные внутренней
date
команды, это происходит в самом начале апреля, и при вычитании месяца возникает разрыв, связанный с изменением EST / EDT:Ваши результаты, конечно, будут зависеть от ваших настроек местного часового пояса. Включение трассировки покажет часовой пояс (в моем случае,
EDT
).Причина, по которой результаты отличаются, заключается в том, что в последнем случае вы дали больше информации
date
, сделали ее параметр более конкретным , то есть конкретное время суток. В первой части это не было указано, что даетdate
больше возможностей для определения даты / времени для отображения.источник
date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"
я получаю точно такой же результат, включая один и тот же тег часового пояса - почему удаление месяца из обоих дает разные результаты?