在Dash中将DURATION HH:MM:SS转换为秒

时间:2013-08-09 14:29:50

标签: bash time duration

我想找到一种方法可以轻松地将持续时间(而不是从1970年等时间等)转换为持续时间(以秒为单位)。请在bash中有一个简单快捷的方法吗? 我试过“日期”和%s等,但它总是返回自1970年以来的时间,我只想要一段时间。

谢谢!

3 个答案:

答案 0 :(得分:4)

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}}'

答案 1 :(得分: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

答案 2 :(得分:2)

帕维尔的答案几乎就是标准解决方案。

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

kent$  echo "05:42:32"|sed 's/:/*60+/g;s/*60/&&/'|bc
20552