在Shell中转换日期

时间:2011-12-23 16:47:24

标签: shell unix date

这是一个很重要的一个,如何转换像

这样的日期
12-23-11 13:37

类似的东西(秒应该总是00)

Fri Dec 23 13:18:58 CET 2011

2 个答案:

答案 0 :(得分:2)

使用gnu date 5.97,你可以这样做:

$ date -d '11-12-23 13:37'

得到你想要的东西,所以你需要做的就是按摩你的输入。

由于gnu日期并不普遍,所以这里有一个快速的perl脚本可以满足您的需求:

$ echo 12-23-11 13:37 |
    perl -MTime::Local -wnE '
    y/-:/  /;
    @F=split;
    say scalar localtime timelocal( 0, $F[4], $F[3], $F[1], $F[0] - 1,$F[2]);
'
Fri Dec 23 13:37:00 2011

(-E需要perl 5.10,但是应该使用-e和print打印旧的perl。)

答案 1 :(得分:1)

如果这是一个自己的脚本而不是必须在百万个不同环境中运行的脚本,那么根据您可用的date版本,您应该能够使用它。

阅读特定版本date的手册页。例如,如果它是http://ss64.com/bash/date.html中记录的版本,则可以使用--date作为输入字符串等。

在Mac OS X上,使用-f选项指定输入格式,-j选项,以便它不会尝试设置日期,并在命令中指定输出格式线。