1

我想有一种方法可以轻松地将持续时间(而不是 1970 年等的时间等)转换为以秒为单位的持续时间,例如 05:42:32。请问有没有一种简单快捷的方法可以在bash中做到这一点?我尝试使用“日期”和 %s 等,但它总是返回自 1970 年以来的时间,我只想要一个持续时间。

谢谢 !

4

3 回答 3

5

awk算作bash吗?

$ echo "05:42:32" | awk -F':' '{print $1 * 60 * 60 + $2 * 60 + $3}'
20552

如果您还需要解析没有小时的持续时间:

awk -F':' '{if (NF == 2) {print $1 * 60 + $2} else {print $1 * 60 * 60 + $2 * 60 + $3}}'
于 2013-08-09T14:32:15.913 回答
3

您可以使用 IFS 将时间拆分为小时、分钟和秒。

#! /bin/bash

to_seconds () {
    IFS=: read h m s <<< "$1"
    echo $(( 10#$h * 3600 + 10#$m * 60 + 10#$s ))
}

duration=05:42:32
to_seconds $duration
于 2013-08-09T14:38:57.037 回答
2

Pavel 的回答几乎是标准解决方案。

只是为了好玩,你也可以这样做(sed + bc)

kent$  echo "05:42:32"|sed 's/:/*60+/g;s/*60/&&/'|bc
20552
于 2013-08-09T14:40:22.593 回答