我有一个包含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