以bash将带有小时和分钟的日期字符串转换为秒

时间:2018-12-05 11:53:44

标签: bash shell date

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

3 个答案:

答案 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