我有一个数值N1 = 20170708192012,并希望转换为日期
就像是 :
D1 = echo $N1 | date -d '+%Y%m%d%H%M%S'
echo $ D1
转换后添加40分钟以获取新日期。
答案 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 mktime
和strftime
(这是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