首页 > 解决方案 > 在bash中将带有小时和分钟的日期字符串转换为秒

问题描述

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

标签: bashshelldate

解决方案


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

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

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

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


推荐阅读