Вопрос или проблема
Легко принять дату в указанном, но нестандартном формате (date -j -f "СУЩЕСТВУЮЩИЙ_ФОРМАТ_ДАТЫ" "СУЩЕСТВУЮЩАЯ_ДАТА" "ФОРМАТ_ВЫВОДА"
) и легко корректировать дату с помощью той же команды (date -j -v+1y "ФОРМАТ_ВЫВОДА"
).
У меня есть дата/время в текстовой строке, которую мне нужно преобразовать (чтобы date
мог это понять), а затем настроить, прежде чем отобразить в заданном формате.
К сожалению, date -j -v+1y -f "СУЩЕСТВУЮЩИЙ_ФОРМАТ_ДАТЫ" "СУЩЕСТВУЮЩАЯ_ДАТА" "ФОРМАТ_ВЫВОДА"
похоже не разрешен, или, по крайней мере, не работает для меня. Как я могу добиться этого эффекта?
$ date -j -v+1y -f %Y%m%d%H%M%S 20240101000000 +%Y-%m-%dT%H:%M:%S
2025-01-01T00:00:00
согласно вашему:
date -j -v+1y -f "СУЩЕСТВУЮЩИЙ_ФОРМАТ_ДАТЫ" "СУЩЕСТВУЮЩАЯ_ДАТА" "ФОРМАТ_ВЫВОДА"
Отлично работает для меня как на FreeBSD 14.0, так и на FreeBSD 11.0 с 2017 года, когда был задан вопрос.
Ответ или решение
Для того чтобы преобразовать и откорректировать заданное время в FreeBSD, вы можете использовать команду date
с опциями для обработки нестандартiformатированных данных. Если вы хотите сначала преобразовать дату в формат, который понимает команда date
, а затем сделать корректировку, это должно выглядеть следующим образом:
date -j -v+1y -f "%Y%m%d%H%M%S" "20240101000000" "+%Y-%m-%dT%H:%M:%S"
Давайте разберём команды:
-j
: используется для того, чтобы командаdate
не изменяла системное время. Она просто выполняет операции над датами.-v+1y
: указывает, что вы хотите добавить один год к указанной дате.-f "%Y%m%d%H%M%S"
: определяет существующий формат даты, который вы передаете. В данном случае это формат YYYYMMDDHHMMSS."20240101000000"
: это строка, содержащая вашу дату и время, которую вы хотите преобразовать."+%Y-%m-%dT%H:%M:%S"
: задаёт формат, в котором вы хотите вывести результат, в данном случае ISO 8601.
Таким образом, если вы выполните эту команду, она корректно преобразует и увеличит дату с 2024-01-01 00:00:00
на один год, в результате чего вы получите 2025-01-01T00:00:00
.
Данный способ работает как в FreeBSD 14.0, так и в FreeBSD 11.0, что было подтверждено на практике.