如何计算日期总和(以分钟为单位) Shell

如何计算日期总和(以分钟为单位) Shell

我需要一些帮助,我不是 shell 脚本专家,但我正在尝试编写一个脚本,其中需要获取纪元号和日期,但要获取全天所有时间,间隔为 15 分钟。结果将类似于以下内容

1376708400|2013-08-17 00:00:00
1376709300|2013-08-17 00:15:00
1376710200|2013-08-17 00:30:00

总共有 96 行,我现在最大的疑问是如何将分钟数增加(或相加)15 分钟,我试过这个

我现在的完整脚本是这样的(我知道这很糟糕,但我并不是一个真正的程序员。我正在学习)

i=96

_incrementatime='+15 minutos'

count=1

_Date=$(`date "2013-08-29 00:00:00"`)
_dataEmSeg = `date -d "2013-08-29 00:00:00" +%s`

while  test $i -ne 0

do
    _VarData=$(`date --date="$_incrementatime*count"`)

    _exprt=$(expr `$_Date+$_VarData`)
    echo "$_dataEmSeg  e  $_exprt    "

    i=$((i-1))
    count=$((count+1))
done

如果有人能告诉我如何解决这个问题,我将非常感激。

答案1

如果你使用 GNU date,它几乎可以自己做所有事情:

#!/usr/bin/env bash

_Date=$(date -d "2013-08-29 00:00:00");
for ((i=0; i<96; i++)); do 
    echo $(date -d "$_Date" +%s)"|"$(date -d "$_Date" +"%F %T")
    _Date=$(date -d "$_Date +15 minutes")
done

您的脚本中存在各种小错误和不必要的步骤,我已将其删除或更正。

答案2

你没有提到你使用的系统,但dseq(1)我的日期工具收集产生一系列日期:

$ dseq '2013-08-17 00:00:00' +15m '2013-08-18 00:00:00' -f '%s|%F %T'
1376697600|2013-08-17 00:00:00
1376698500|2013-08-17 00:15:00
...

前 3 个参数表示序列的起点和终点,中间的参数表示增量(就像seq(1)真的一样)。该-f开关允许您指定输出格式,并采用与 GNU 中类似的格式说明符date

相关内容