我正在将一些数据从一种文件格式调解到另一种文件格式,并使用bash来执行调解步骤。部分过程涉及从文件名中取一个时间戳来创建一个开始时间,然后再添加5分钟来创建结束时间。文件名以YYYYmmddHHMMSS格式给我一个日期。我可以轻松地为每个开始时间添加500以获得适用于所有开始时间的终止时间,除了超过55小时,但这显然不正确所以我尝试使用date --date=
代码添加5分钟这样:
date --date='$starttime +5 minutes' '+%Y%m%d%H%M%S'
例如:
date --date='20140220125500 +5 minutes' '+%Y%m%d%H%M%S'
但是我每次都会收到这样的错误:
日期:无效日期`20140220125500 +5分钟'
有人可以在我的日期声明中建议我需要更改的内容,或者是否有类似的替代语法?
答案 0 :(得分:2)
这对我有用:
$ date --date='20140220 12:55:00 CET +5 minutes' '+%Y%m%d%H%M%S'
20140220130000
也就是说,问题是YYYYYMMDDHHMMSS
单独date
无法理解。相反,请以YYYYYMMDD HH:MM:SS
格式提供。
当您收到YYYYYMMDDHHMMSS
格式的数据时,您可以使用sed
解析它,如下所示:
$ file="YYYYmmddHHMMSS"
$ new_name=$(sed -e 's/^\(.\{8\}\)\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1 \2:\3:\4/' <<< "$file")
$ echo "$new_name"
YYYYmmdd HH:MM:SS
所以在你的情况下:
$ file="20140220125500"
$ new_name=$(sed -e 's/^\(.\{8\}\)\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1 \2:\3:\4/' <<< "$file")
$ echo "$new_name"
20140220 12:55:00
$ date --date="$new_name CET + 5 minutes"
Thu Feb 20 13:00:00 CET 2014
注意我用过
$ date --date="$new_name CET +5 minutes" '+%Y%m%d%H%M%S'
^ ^
note the double quotes to have the var expanded