KSH:如何将整数转换为日期并在unix中添加Minutes

时间:2017-08-14 09:14:18

标签: bash shell unix ksh

我有一个数值N1 = 20170708192012,并希望转换为日期 就像是 : D1 = echo $N1 | date -d '+%Y%m%d%H%M%S' echo $ D1

转换后添加40分钟以获取新日期。

2 个答案:

答案 0 :(得分:0)

在将字符串传递给日期之前,您需要解析它,所以:

 N1=$(awk '{ print substr($0,1,8)" "substr($0,9,2)":"substr($0,11,2)":"substr($0,13,2)}' <<< 20170708192012)

使用awk和substr函数以日期可接受的格式构建N1。

答案 1 :(得分:0)

如果您的awk支持time functions mktimestrftime(这是GNU扩展),您可以先将输入字符串转换为Unix时间戳(通过手动拆分)并使用mktime),然后使用strftime格式化输出:

N1=20170708192012
D1=$(awk '{ print strftime("%Y%m%d%H%M%S", mktime(substr($0,1,4)" "substr($0,5,2)" "substr($0,7,2)" "substr($0,9,2)" "(substr($0,11,2)+40)" "substr($0,13,2))) }' <<<"$N1")

请注意,mktime仅接受"YYYY MM DD HH MM SS"格式的日期,这就是我们需要手动构建日期的原因。但会自动执行规范化,并且会很快将"2017 1 1 0 80 0"转换为与"2017 1 1 1 20 0"相同的时间戳。这就是我们可以简单地将40添加到输入分钟并获得正确输出的原因。

为了您的输入,我们得到:

echo $D1
20170708200012