计算日期总和

计算日期总和

我们使用的第三方脚本根据某个作业运行的分钟数来提取信息。我需要在脚本中输入此输入。

例如
这是一个例子

    export etool_start=`date +"%Y%m%d%H%M:"`  

我的主脚本将在开始时间和结束时间之间运行。

    export etool_end=`date +"%Y%m%d%H%M"`

上述结果的输出将如下所示:201607050220:201607050230。时间是 0220 到 0230。我的脚本不接受这种日期类型,只接受像 -0010(10 分钟)这样的分钟。我怎样才能创建一个数学来帮助我得到这个结果。我给出的时间只是一个例子,采样间隔甚至可以在2分钟到120分钟到一天之间。我如何利用 date 命令来获得这种输出。

请帮忙。

谢谢。

答案1

测量自纪元 ( ) 以来的时间(以秒为单位)要简单得多,+%s然后只需减去即可找到以秒为单位的经过时间,从秒到分钟的转换只需除以 60:

export etool_start=$(date +"%s")
do_stuff_with_etool
export etool_stop=$(date +"%s")
echo "elapsed time=$(( (etool_stop - etool_start)/60 )) minutes"

如果你确实需要人类形态的时间,你可以将它们转换。使用 GNU date

$ date -d "@$etool_start"
Tue Jul  5 21:30:19 PDT 2016

或者:

$ date -d "@$etool_start"  "+%Y%m%d%H%M"
201607052130

有关格式化的更多信息

为了以不同的格式表示经过的时间(以分钟为单位),我们可以使用printf。例如,要生成四位数的经过时间,我们可以使用以下格式%04i

$ printf '%04i\n' "$(( ($etool_stop - $etool_start)/60 ))" 
0001

的格式%4i将为我们提供一个由四个字符组成的整数 (i)。如果我们想要前导零而不是前导空格,那么我们使用%04i.

如果我们想要数字的相反符号:

$ printf '%05i\n' "$(( ($etool_start - $etool_stop)/60 ))" 
-0035

由于减号需要额外的字符,因此我们将分配的空间从 4 增加到 5: %05i

更多分辨率

因为上面的例子使用了 bash 的算术,它只是整数。如果您想要以分钟为单位的经过时间(包含一分钟的小数部分),bc可以使用另一个工具,例如:

$ echo "($etool_stop - $etool_start)/60" | bc -l
1.38333333333333333333

自纪元以来的秒数是多少?

man date纪元以来的秒数定义为:


自 1970-01-01 00:00:00 UTC 以来的%s秒

由于它是这样定义的,因此本地时区是无关紧要的。因此,在“本地时区”或世界时 下计算它-u没有区别:

$ date +%s; date -u +%s
1467780345
1467780345

答案2

在bash中:

$ export etool_starting=`date -u +"%s"`  
$ export etool_ending=`date -u +"%s"`

如果只需要几分钟:

$ printf '%05d\n' "$(( (etool_starting - etool_ending) / 60 ))"
-0120       ### If 120 minutes have elapsed in between.

相关内容