Анализ даты из строки

Bash:
Анализ даты из строки

Как это сделать:

Использование date с +%Y-%m-%d дает нам форматированный вывод:

date_str="Jan 01 2023"
formatted_date=$(date -d "$date_str" '+%Y-%m-%d')
echo $formatted_date
2023-01-01

date -d позволяет нам разобрать нашу строку, в то время как +%Y-%m-%d определяет формат вывода.

Глубокое погружение

Сам Bash не очень хорош в разборе дат. Исторически, в системах Unix не было встроенной поддержки для этого. В большинстве случаев скрипты полагались на внешние инструменты или сложные обходные пути. GNU date изменил правила игры с его опцией -d, позволяющей легко разбирать даты и форматировать вывод.

Альтернативы? Конечно, есть awk, sed, и perl. У каждого свой подход к решению проблемы, но date обычно является первым выбором из-за простоты.

Детали реализации становятся более интересными. date по умолчанию использует системные настройки локали, что влияет на интерпретацию ввода. Может потребоваться переопределение локали для обеспечения последовательного поведения в разных средах. К тому же, обработка дат до 1970 года или после 2038? Вот где могут появиться проблемы из-за ограничений временной метки Unix.

Смотрите также