我正在将一些数据从一种文件格式调解到另一种文件格式,并使用 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 分钟"
任何人都可以建议我需要在我的日期语句中更改什么,或者是否有类似的替代语法可用?
这对我有用:
$ date --date='20140220 12:55:00 CET +5 minutes' '+%Y%m%d%H%M%S'
20140220130000
也就是说,问题是date
无法理解仅YYYYYMMDDHHMMSS
.相反,请以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