1

我目前正在处理一个处理和组合几个不同文件的脚本,一方面,我有必要找到两个不同时间之间的差异,以确定某人工作的“总”时间。时间本身采用以下格式

 34:18:00,40:26:00,06:08:00

第一个是开始时间,第二个结束时间,第三个总时间。虽然这一项显示正确,但有一些条目需要仔细检查和更正(根据开始/结束时间,总时间不正确)。我在其他帖子中找到了几种不同的解决方案,但其中大多数还包括日期等(其中大多数使用 awk),我对 awk 没有经验,所以不知道如何从这些示例中删除日期部分。我也听说我可以将时间转换为 unix 纪元时间,但我只是好奇是否还有其他方法可以做到这一点,谢谢!

4

1 回答 1

7

这样的事情可能会帮助你:

#!/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=%s\n" "$start"
printf "Stop=%s\n" "$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)

注意:没有任何东西可以检查时间是否采用有效格式,我不知道您的数据有多可靠。

于 2012-11-24T19:22:22.933 回答