我有一个包含YYYYMMDDHHMM格式的示例字符串。 我正在尝试将其转换为秒,但低于错误。
[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 ~]$
答案 0 :(得分:1)
根据this answer 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中命名变量的约定是使用小写字母。按照惯例,所有大写字母都只写特殊变量。使用大写形式的变量名称可能会导致与这些变量的名称冲突。
答案 1 :(得分:1)
显然,用空格分隔日期和时间部分就足够了,所以:
$ echo 201812051147 |
sed -E 's/(.{8})(.{4})/\1 \2/' |
date -f - +"%s"
输出:
1544003220
答案 2 :(得分:0)
您可以使用“触摸”命令将该日期分配给文件,然后使用“日期”打印该文件,请尝试以下操作:
touch -t 201812051147 tmpfile ; date -r tmpfile +%s ; rm -f tmpfile