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

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

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

# Базовый разбор даты с использованием функции `strptime`
set date_string "2023-04-15"
set -l format "%Y-%m-%d"
set -l parsed_date (string tolower (date -u --date=$date_string +"$format"))

echo $parsed_date # Выводит: 2023-04-15
# Обработка нескольких форматов дат с помощью switch
set date_string1 "15-04-2023"
set date_string2 "Апрель 15, 2023"

function parse_date -a date_string
    switch $date_string
        case "*-*-*"
            date --date=$date_string +%Y-%m-%d
        case "* *, *"
            date --date=$date_string +%Y-%m-%d
    end
end

echo (parse_date $date_string1) # Выводит: 2023-04-15
echo (parse_date $date_string2) # Выводит: 2023-04-15

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

Fish Shell не имеет встроенных функций разбора дат, как некоторые другие языки. Вместо этого он опирается на внешние утилиты, такие как date. Команда date универсальна, и с помощью strptime (разбор строки времени), которая является стандартной функцией библиотеки C, она может обрабатывать множество форматов дат.

До date и strptime программисты писали собственные парсеры — часто с ошибками и сложные. Теперь утилиты обрабатывают особенности часовых поясов и високосных годов, избавляя нас от головной боли.

Альтернативы? Конечно, скриптовые языки, такие как Python, имеют мощные библиотеки для работы с датой и временем, например, datetime. Но Fish, будучи ‘оболочкой’, предпочитает легковесные программы для командной строки для такой задачи.

В наших примерах мы использовали switch, чтобы выбрать формат даты для разбора командой date. Это чисто и расширяемо. Хотите больше форматов? Добавьте больше блоков case.

Почему string tolower в первом примере? Это связано с обеспечением единообразия, гарантируя, что строка формата и вывод будут однотипно в нижнем регистре. Маленькое прикосновение, но оно иллюстрирует предпочтение Fish к простым строковым операциям.

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