命令行工具转换日期格式

时间:2018-12-31 18:00:59

标签: shell datetime command-line string-formatting

我有一个文本文件(实际上是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 :(得分:1)

看来GNU日期将01/02/2018解释为1月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

答案 1 :(得分:0)

date实用程序完成了我想要的一部分。但是仅用于单个字符串,不能处理文件或流。

我知道如何用各种编程语言来完成任务。我希望可以使用命令行实用程序来实现。我决定尝试用Julia写一个“中等程度”的版本。并不是因为它一定是最好的语言选择(启动时间太糟糕了),而是因为我想使用该语言。我确信这种早期尝试不是惯用的或最佳的,但基本上可以达到目标:

gist.github.com/DavidMertz/447661d67f7b3f5ffa3c23d56f3b7294