我想计算下面两者之间的时间差
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