Однострочник для конвертации и настройки указанного времени в FreeBSD

Вопрос или проблема

Легко принять дату в указанном, но нестандартном формате (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"

Давайте разберём команды:

  1. -j: используется для того, чтобы команда date не изменяла системное время. Она просто выполняет операции над датами.
  2. -v+1y: указывает, что вы хотите добавить один год к указанной дате.
  3. -f "%Y%m%d%H%M%S": определяет существующий формат даты, который вы передаете. В данном случае это формат YYYYMMDDHHMMSS.
  4. "20240101000000": это строка, содержащая вашу дату и время, которую вы хотите преобразовать.
  5. "+%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, что было подтверждено на практике.

Оцените материал
Добавить комментарий

Капча загружается...