如果需要使用bash,你需要将时间戳转换成一个整数值:
$ time="12:34:56.789"
$ IFS=":." read -r h m s ms <<<"$time"
$ echo $h $m $s $ms
12 34 56 789
$ milliseconds=$(((h*3600 + m*60 + s)*1000 + ms))
$ echo $milliseconds
45296789
然后您可以减去以获得表示差异的毫秒数。
转换为秒一些算术和字符串建设:
$ seconds="$((milliseconds/1000)).$((milliseconds % 1000))"
$ echo $seconds
45296.789
为了解决gniourf_gniourf的有效点(笨方法):
$ time="12:34:56.7"
$ IFS=":." read -r h m s ms <<<"$time"
$ ms="${ms}000"; ms=${ms:0:3}
$ echo $h $m $s $ms
12 34 56 700
# .......^^^
此外,字符串是无效的八进制数字,如“08”和“09”将在bash算法中抛出错误,所以明确声明它们是基地10
milliseconds=$(((10#$h*3600 + 10#$m*60 + 10#$s)*1000 + 10#$ms))
您的时间戳是如何获得的?也许我们在这里遇到一个XY问题:你是否想要一个过程? –
请为样本输入添加样本输入和您想要的输出到您的问题。 – Cyrus
您有权访问GNU日期吗? – Cyrus