在bash中将包含小时和分钟的日期字符串转换为秒



我有一个包含YYYYMMDDHMM格式的示例字符串。我试图将其转换为秒,但出现以下错误。

[vagrant@CentOS-Seven ~]$ export SAMPLE_DATE=201812051147
[vagrant@CentOS-Seven ~]$ echo $SAMPLE_DATE
201812051147
[vagrant@CentOS-Seven ~]$ date -d $SAMPLE_DATE
date: invalid date ‘201812051147’
[vagrant@CentOS-Seven ~]$

根据这个答案,date没有指定输入格式的选项。因此,您必须将您的输入转换为date所接受的格式。以下命令中的sed命令将201812051147转换为2018-12-05 11:47
要将日期转换为秒,请使用输出格式+%s

$ input=201812051147
$ date -d "$(sed -E 's/(....)(..)(..)(..)(..)/1-2-3 4:5/' <<< "$input")" +%s
1544010420

请不要说输出取决于您的系统时区。您可以通过设置TZ环境变量来更改时区。

顺便说一句:在这种情况下,您不必导出变量。此外,bash中命名变量的约定是使用小写字母。按照惯例,只有特殊变量是用大写字母写的。使用全大写的变量名可能会导致与这些变量的名称冲突。

显然,用空格分隔日期和时间部分就足够了,所以:

$ echo 201812051147 | 
sed -E 's/(.{8})(.{4})/1 2/' | 
date -f - +"%s"

输出:

1544003220

您可以使用"touch"命令将日期分配给文件,然后使用"date"打印,请尝试以下操作:

touch -t 201812051147 tmpfile ; date -r tmpfile +%s ; rm -f tmpfile

最新更新