如何将我的数组日期添加到datediff计算中

问题描述:

新手在此处打击脚本,如果您有时间,可以使用一些帮助。我的客户上传,每个人都有这样的文件名的邮戳:如何将我的数组日期添加到datediff计算中

* 20170815041135 
* 20170820041135 
* 20170823071727 
* 20170826040609 
* 20170828050704 
* 20170830153011 

我需要计算每次上传之间的天数,然后找到上市上传的平均间隔

我能找到的时间差使用此命令两个日期之间

echo $((($(date --date="20170831" +'%s') - $(date --date="20170821" +'%s'))/(60*60*24))) 

给10

要做到多个日期我读过,我需要一个数组,所以这里是我的范围Ø f在数组中上传日期。

array=(`20170830153011`,`20170828050704`,`20170826040609`,`20170823071727`,`20170820041135`,`20170815041135`) 

我读过我需要遍历这样

for i in "${array[@]}" do 
    ? 

计算如何添加我的数组日期,计算?

+0

“每个文件名都有一个日期戳记” - 什么是完整的文件名? –

+0

XXX_1_20170830200211.bin –

+0

'filename = XXX_1_20170830200211.bin; TMP = $ {文件名%的.bin}; datestamp = $ {tmp ## * _}' - 见https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion –

你的日期时间到一个数组:

timestamps=(
    20170815041135 
    20170820041135 
    20170823071727 
    20170826040609 
    20170828050704 
    20170830153011 
) 

现在让我们转换成那些*时报:

epochs=() 
for timestamp in "${timestamps[@]}"; do 
    iso8601=$(sed -r 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3T\4:\5:\6/' <<<"$timestamp") 
    epochs+=("$(date -d "$iso8601" "+%s")") 
done 
printf "%s\n" "${epochs[@]}" 
1502784695 
1503216695 
1503487047 
1503734769 
1503911224 
1504121411 

现在我们可以对他们进行迭代计算的差异。需要注意的是bash的数组的下标从零开始:

n=0 
sum=0 
for ((i=1; i < "${#epochs[@]}"; i++)); do 
    ((n++, diff=(${epochs[i]} - ${epochs[i-1]}), sum+=diff)) 
    echo "diff $n = $diff seconds = $((diff/86400)) days" 
done 
echo "average = $((sum/n)) seconds = $((sum/n/86400)) days" 
diff 1 = 432000 seconds = 5 days 
diff 2 = 270352 seconds = 3 days 
diff 3 = 247722 seconds = 2 days 
diff 4 = 176455 seconds = 2 days 
diff 5 = 210187 seconds = 2 days 
average = 267343 seconds = 3 days 
+0

谢谢Glenn,你很善良像这样 –

转换的日期在几秒钟内从1970年 计算差值。 我希望bash日期函数知道从该日期开始考虑夏令时。