日期差异计算

日期差异计算

我想计算下面两者之间的时间差

Value1=2016-10-13 14:19:23
Value2=2016-10-13 18:19:23 

我想得到小时/分钟形式的差异。有什么快速解决方案吗?

答案1

您可以使用date(假设是 GNU 实现)命令替换,并使用算术扩展来获取时间之间的差异:

% Value1='2016-10-13 14:19:23'

% Value2='2016-10-13 18:19:23' 

% echo "$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s')))"
14400

结果以秒为单位。

答案2

答案以小时/分钟/秒为单位:

date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%T'

只需几小时/分钟即可得到答案(按照最初的要求):

date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%H:%M'

上面假设用户只对小时和分钟的差异感兴趣,而忽略了日期的差异。答案完全取决于想要什么。

处理大于或等于一天的差异:

Value1='2016-10-13 14:19:23'
Value2='2016-10-18 10:34:58'

D1=$(date -d "$Value1" '+%s'); D2=$(date -d "$Value2" '+%s')
echo "$(((D2-D1)/86400)):$(date -u -d@$((D2-D1)) +%H:%M)"

产量:

4:20:15

对于各种 shell,我们还可以在 Bash 中执行诸如以下操作:

declare -i Delta=D2-D1
declare -i Days=Delta/86400
echo "$Days:$(date -u -d@$Delta +%H:%M)"

答案3

$ datediff -f "%H hours and %M minutes" "2016-10-13 14:19:23" "2016-10-13 18:19:23"
4 hours and 0 minutes

datediff 来自 dateutils 包。http://www.fresse.org/dateutils/

请注意,与该命令相反date,dateutils 默认情况下使用 GMT 忽略区域设置。这可能会使夏令时调整产生一小时的差异。

比较:

$ datediff  -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
24:0

$ datediff --from-zone=Europe/Berlin  -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
25:0

相关内容