1

Я пытаюсь написать быстрый сценарий, который вычисляет дату следующего понедельника, а не сегодня. Хотя команда date принимает это выражение, она, по-видимому, интерпретирует его как эквивалент "этого понедельника". То есть, если сегодня понедельник, он испускает сегодняшнюю дату, в противном случае - понедельник следующей недели.

Любые идеи, как сделать это с помощью команды даты (или действительно любой команды, доступной для bash), не прибегая к самому арифметике даты?

Обновление: это выглядит странно в моей среде, так как несколько человек показали, что команда работает в своих системах, как и ожидалось. Вот что я вижу:

$ date
Tue Jul 31 23:38:28 UTC 2012
$ date -d 'next tuesday'
Tue Jul 31 00:00:00 UTC 2012
$ date --version
date (GNU coreutils) 5.97

Похоже, у меня есть древняя версия даты, возможно, это моя проблема ...

2 ответа2

2

Вы уверены, что нет проблем с тем, как вы выполняете команду в сценарии, возможно, отсутствуют кавычки или что-то в этом роде? Я не могу воспроизвести вашу проблему.

$ date
Tue Jul 31 19:08:50 EDT 2012
$ date -d "next tuesday"
Tue Aug  7 00:00:00 EDT 2012
$ date -d "this tuesday"
Tue Jul 31 00:00:00 EDT 2012
$ date --version
date (GNU coreutils) 8.5
1

Дата GNU, кажется, работает правильно.

error@underground ~/Downloads $ date -d "next monday"
Mon Aug  6 00:00:00 EDT 2012
error@underground ~/Downloads $ date -d "next tuesday"
Tue Aug  7 00:00:00 EDT 2012
error@underground ~/Downloads $ date -d "next wednesday"
Wed Aug  1 00:00:00 EDT 2012
error@underground ~/Downloads $ date --version
date (GNU coreutils) 8.15

Убедитесь, что ваша система действительно имеет правильную дату, время и часовой пояс.

Также убедитесь, что вы используете относительно свежую версию GNU coreutils. Поведение, которое вы описали, было ошибкой в старых версиях coreutils, которая была исправлена в версии 6.0.

date: команда типа date -d '2006-04-23 21 день назад' напечатает неправильную дату в некоторых часовых поясах. (см тест для примера)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .