2012-02-07 36 views
6

我正在運行一些可生成 mm:ss.mm(分,秒和毫秒,例如1:20.66)輸出的gnu時間腳本 或hh :MM:ss(小時,分鐘和秒,例如1:43:38)。 我想將其轉換爲秒(以便比較它們並將它們繪製在圖形中)。將HH:MM:SS.mm轉換爲bash中的秒數

這是使用bash做到這一點的最簡單方法?

回答

4

假設你可以運行GNU date命令:如果腳本生成

date +'%s' -d "01:43:38.123" 

「MM:ss.mm」 你需要加上 「00」 的開頭,或date將拒絕它。

如果您使用的是BSD系統(包括Mac OS X),則需要運行date -j +'%s' "0143.38",除非您使用MacPorts或Homebrew或其他軟件安裝了GNU日期。

+0

只是注意日期會運行問題,如果您試圖解釋標準那些在[GTFS](https://developers.google.com/transit/gtfs/reference?hl=en#stop_timestxt)中看到的時間可能超過23小時。例如,27:05:00是合法的。 – 2015-09-14 15:54:45

8
$ TZ=utc date -d '1970-01-01 1:43:38' +%s 
6218 
+2

或將時區放在日期字符串中:「date -d'1970-01-01 1:43:38Z'+%s」 – 2012-02-08 07:45:51

6

如果你想純bash,那麼你可以這樣做

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

10#部分是強制性的規定,則數字以基數10發做不到這一點,你會得到錯誤是否hms0809(因爲Bash用八進制來解釋前導0的數字)。