我目前正在研究一个处理和组合几个不同文件的脚本,对于一部分,我有必要找到两个不同时间之间的差异,以确定某人工作的"总"时间量。 时代本身采用以下格式
34:18:00,40:26:00,06:08:00
第一个是开始时间,第二个结束时间,第三个总时间。虽然这个显示正确,但有些条目需要仔细检查和更正(根据开始/结束时间,总时间不正确)。我在其他帖子中找到了几种不同的解决方案,但其中大多数还包括日期等(其中大多数使用 awk),我对 awk 没有经验,所以不确定如何从这些示例中删除日期部分。我也听说我可以将时间转换为 unix 纪元时间,但我只是好奇是否有其他方法可以实现这一点,谢谢!
这样的事情可能会帮助你:
#!/bin/bash
time2seconds() {
a=( ${1//:/ } )
echo $((${a[0]}*3600+${a[1]}*60+${a[2]}))
}
seconds2time() {
printf "%.2d:%.2d:%.2d" $(($1/3600)) $((($1/60)%60)) $(($1%60))
}
IFS=, read start stop difference <<< "34:18:00,40:26:00,06:08:00"
printf "Start=%sn" "$start"
printf "Stop=%sn" "$stop"
printf "Difference=%s (given in file: %s)n" $(seconds2time $(($(time2seconds $stop)-$(time2seconds $start)))) "$difference"
输出为:
Start=34:18:00
Stop=40:26:00
Difference=06:08:00 (given in file: 06:08:00)
注意:没有什么可以检查时间是否有效,我不知道您的数据有多可靠。