Как я могу использовать команду date, чтобы преобразовать что-то вроде «понедельника недели 40» в дату ISO?
Я играю с чем-то вроде этого:
date --date='monday week 40' +'%Y-%m-%d'
И дата, которую я ищу, будет 2011-10-03.
Но моя проблема в том, что эта строка даты недопустима, поэтому мне нужен другой подход для решения этой проблемы.
/Спасибо
%V
форматов, используемая «неизвестным пользователем», сообщает номер недели ISO.Ответы:
Действительно некрасиво и, вероятно, работает только с GNU
date
:Протестировано только для вашего примера 3 октября, может не работать в некоторых других случаях.
Обновление : если у вас неязыковая локаль, вам нужно указать выходные данные из внутренней даты, чтобы приступить к работе. (И% F - это ГГГГ-ММ-ДД).
источник
Альтернативный подход:
источник
date +%V
возвращается41
), то--date
значение параметра будет+-1weeks last monday
, что на самом деле две недели назад, а не 7 дней назад.date -d 'last monday'
. Он вернется вчера. Как вы думаете, что бы сказал, если бы вы запустили его вчера?Хорошо, вот моя попытка Он крадет идеи из других ответов и пытается упростить логику. Это основано на системе ISO 8601, поэтому она не будет корректной, если вы живете в таких странах, как США или Канада, но должна быть легко настраиваемой для этих стран.
источник