Инструмент командной строки для преобразования формата даты - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть текстовый файл (на самом деле Markdown, но достаточно близко) с датами в слегка раздражающем американском формате %m/%d/%Y.Я бы хотел, чтобы он был везде в формате ISO-8601.

Я мог бы легко написать сценарий из 5-10 строк, чтобы выполнить это конкретное преобразование, но такое чувство, что кто-то написал болееполная версия уже.Я просто не знаю, как называется этот гипотетический инструмент.

Мой воображаемый инструмент будет принимать произвольные форматы для ввода и вывода (но из мира форматов даты и времени), хотя, возможно, с ярлыками для распространенных.По сути, я бы хотел знать дату / время sed.Поэтому я мог бы запустить, например:

$ datecvt -i US -o ISO8601 < myfile.txt > gooddates.txt
$ # ... or ...
$ datecvt -i '%m/%d/%Y' -o '%Y-%m-%d' --inplace myfile.txt

Возможно, немного другой синтаксис использования, но такого рода вещи.Это существует?(для OSX, но почти все ориентированные на Linux инструменты могут быть скомпилированы и были с Homebrew).

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Утилита date делает часть того, что я хочу.Но только для одной строки, а не для обработки файла или потока.

Я знаю, как выполнить задачу на разных языках программирования.Я надеялся, что это сделает утилита командной строки.Я решил попробовать написать «умеренно хорошую» версию на Юлии.Не потому, что это лучший язык для выбора (время запуска ужасно), а просто потому, что я хотел поиграть с этим языком.Я уверен, что эта ранняя попытка не идиоматична и не оптимальна, но она в основном преследует цель:

gist.github.com / DavidMertz / 447661d67f7b3f5ffa3c23d56f3b7294

0 голосов
/ 31 декабря 2018

Похоже, что дата GNU интерпретирует 01/02/2018 как 2-е января

$ date -d '01/02/2018'
Tue Jan  2 00:00:00 EST 2018

Так что вы можете сделать это:

$ date -d '01/02/2018' -I
2018-01-02

Или, если вы хотите четко указать формат вводаPerl полезен:

$ perl -MTime::Piece -slE 'say Time::Piece->strptime($date, "%m/%d/%Y")->ymd' -- -date=01/02/2018
2018-01-02
...