将日期和时间转换为一个数字Bash编程

时间:2012-10-17 18:14:52

标签: shell

输入文件包含

2012-12-23 23:59:59

我必须首先将时间转换为秒,然后与日期结合(将日期作为小数添加到时间)

time (sec) = 23*3600 + 59*60 + 59 = 86400

日期.23(仅限日期)

输出应为86400.23

朋友们请帮帮我。我无法让这个工作。提前谢谢。

2 个答案:

答案 0 :(得分:1)

请参阅以下bash代码:

d='2012-12-23 23:59:59'
IFS=: read h m s <<< "$d"
day=${d% *}; day=${day##*-}
echo $(( (${h#* } * 3600) + (m * 60) + s)).$day

awk

d='2012-12-23 23:59:59'
read day hour min sec < <(awk -F'[ :-]' '{print $3, $4, $5, $6}' <<< "$d")
echo $(( (hour * 3600) + (min * 60) + sec)).$day

或者简单地说:

 echo '2012-12-23 23:59:59' | awk -F'[ :-]' '{print ($4*3600)+($5*60)+$6"."$3}'

答案 1 :(得分:1)

您可以使用date命令验证/格式化输入:

#!/bin/bash
read datetime
date=$(date --date="$datetime" +%d)
time=$(date --date="$datetime" +"1970-01-01 %H:%M:%S UTC")
echo $(date --date="$time" +%s).$date
# -> 86399.23

demo