ser*_*com 4 scripting bash shell-script
我想计算下面两者之间的时差
Value1=2016-10-13 14:19:23
Value2=2016-10-13 18:19:23
Run Code Online (Sandbox Code Playgroud)
我想以小时/分钟的形式获得差异。任何可用的快速解决方案?
hee*_*ayl 10
您可以使用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
Run Code Online (Sandbox Code Playgroud)
结果以秒为单位。
答案以小时/分钟/秒为单位:
date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%T'
Run Code Online (Sandbox Code Playgroud)
只需几小时/分钟即可得到答案(按照最初的要求):
date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%H:%M'
Run Code Online (Sandbox Code Playgroud)
上面假设用户只对小时和分钟的差异感兴趣,而忽略了日期的差异。答案完全取决于想要什么。
处理大于或等于一天的差异:
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)"
Run Code Online (Sandbox Code Playgroud)
产量:
4:20:15
Run Code Online (Sandbox Code Playgroud)
对于各种 shell,我们还可以在 Bash 中执行诸如以下操作:
declare -i Delta=D2-D1
declare -i Days=Delta/86400
echo "$Days:$(date -u -d@$Delta +%H:%M)"
Run Code Online (Sandbox Code Playgroud)