在bash中将HH:MM:SS.mm转换为秒

Lui*_*ixv 7 bash

我正在运行一些gnu时间脚本,它们生成mm:ss.mm(分钟,秒和毫秒,例如1:20.66)或hh:MM:ss(小时,分钟和秒,例如1:43)的输出: 38).我想将其转换为秒(为了比较它们并在图形中绘制它们).

哪个是使用bash执行此操作的最简单方法?

kev*_*kev 8

$ TZ=utc date -d '1970-01-01 1:43:38' +%s
6218
Run Code Online (Sandbox Code Playgroud)

  • 或者将时区放在日期字符串中:"date -d'1970-01-01 1:43:38Z'+%s" (2认同)

Mic*_*ker 6

如果你想要纯粹的Bash,你可以做类似的事情

IFS=: read h m s <<<"${hms%.*}"
seconds=$((10#$s+10#$m*60+10#$h*3600))
Run Code Online (Sandbox Code Playgroud)

10#部分是强制性的规定,则数字以基数10发做不到这一点,如果你会得到错误h,m或者s0809(如Bash解释数字与一家领先的0八进制).


mkb*_*mkb 5

假设您可以运行GNU date命令:

date +'%s' -d "01:43:38.123"
Run Code Online (Sandbox Code Playgroud)

如果脚本生成“ mm:ss.mm”,则需要在开头添加“ 00:”,否则date将拒绝它。

如果您使用的是BSD系统(包括Mac OS X),则需要运行,date -j +'%s' "0143.38"除非您在MacPorts或Homebrew上安装了GNU日期。