Bash:
Сравнение двух дат
Как это сделать:
Вот быстрый способ сравнения двух дат в Bash:
date1="2023-04-01"
date2="2023-04-15"
# Преобразование дат в секунды с начала эпохи
sec1=$(date -d "$date1" +%s)
sec2=$(date -d "$date2" +%s)
# Сравнение дат
if [ $sec1 -eq $sec2 ]; then
echo "Даты совпадают."
elif [ $sec1 -lt $sec2 ]; then
echo "Дата $date1 раньше чем $date2."
else
echo "Дата $date1 позже чем $date2."
fi
Пример вывода, если $date2
позже:
Дата 2023-04-01 раньше чем 2023-04-15.
Более подробно
Исторически, сравнение дат в скриптах оболочки было неочевидным из-за различных форматов дат и отсутствия встроенных функций. Команда date
с использованием %s
для преобразования дат в секунды с момента Unix эпохи (00:00:00 UTC 1 января 1970 года) - это настоящая находка.
Альтернативы включают использование внешних инструментов, таких как awk
, или сравнение строк - рискованно, если форматы различаются. С точки зрения реализации, один из нюансов - работа с часовыми поясами: добавление TZ=UTC
перед командами date
гарантирует сравнение в UTC.
Арифметика дат, такая как нахождение разницы между датами, может быть сложной. Добавление или вычитание дней требует дополнительных хитростей с date
. Особые случаи, такие как високосные секунды или переходы на летнее время, могут вносить ошибки.
Смотрите также
- Страница руководства
date
для вариантов форматирования. - Stack Overflow для мудрости сообщества и устранения неполадок.