← На главную

Biff: парси, форматируй и трансформируй даты в JSON

28.05.2026 02:58 · hackernews

Biff — это утилита для командной строки, которая умеет работать с датами и временем: парсить, форматировать, складывать и вычитать интервалы, искать разницу между датами. Написана на Rust, распространяется под двойной лицензией MIT или UNLICENSE.

Запускаешь biff без аргументов — получаешь текущее время в человекочитаемом виде вроде Sat, May 10, 2025, 8:02:04 AM EDT. Можно указать формат — например, biff time fmt -f rfc3339 now выдаст строку по стандарту RFC 3339. Поддерживаются и strftime-шаблоны, и относительные даты: biff time add -1w now отнимет неделю, biff time add '1 week, 12 hours ago' now сработает с человеческим описанием.

Встроена работа с часовыми поясами: biff time in Asia/Bangkok now покажет текущее время в Бангкоке. Есть округление до заданного шага — biff time round -i 15 -s minute округлит до 15 минут. biff span since 2025-01-20T12:00 посчитает, сколько времени прошло с указанной даты, с точностью до наносекунд.

Самая необычная фича — biff tag. Утилита умеет читать произвольные данные (например, логи), находить в них даты, оборачивать их в JSON-строки и затем трансформировать эти даты как угодно: переводить в локальный часовой пояс, менять формат, сортировать. В документации показан пример с логами HTTP-сервера, где таймстампы из UTC конвертируются в системное время прямо на ходу.

Ещё Biff умеет генерировать последовательности дат. Например, можно получить все понедельники, среды и пятницы на ближайшие пять дней, начиная с сегодня, в 9 утра. Или вывести каждый оставшийся день текущего месяца. Или найти последний рабочий день в каждом из следующих 12 месяцев. Причём всё это комбинируется через пайпы — biff обрабатывает JSON-формат, который передаёт сам себе.

За установку отвечает cargo. Пакет на crates.io называется biff-datetime-cli. Готовые бинарники есть для Windows, macOS и Linux — статические исполняемые файлы. Если нужна поддержка локалей (она включена в релизных сборках), при сборке надо указать флаг --features locale.

Внутри Biff почти не содержит собственной логики работы с датами — он полагается на библиотеку Jiff. Локализацию тянет из ICU4X через прослойку jiff-icu. Автор (BurntSushi) предупреждает: совместимости с date из POSIX не планируется, это не замена. Но biff time fmt понимает синтаксис strftime в значительной степени, так что базовые вещи переедут без проблем. Проект ещё не стабилен — автор оставляет за собой право ломать обратную совместимость в любой момент.

Читать оригинал →