我正在運行一些可生成 mm:ss.mm(分,秒和毫秒,例如1:20.66)輸出的gnu時間腳本 或hh :MM:ss(小時,分鐘和秒,例如1:43:38)。 我想將其轉換爲秒(以便比較它們並將它們繪製在圖形中)。將HH:MM:SS.mm轉換爲bash中的秒數
這是使用bash做到這一點的最簡單方法?
我正在運行一些可生成 mm:ss.mm(分,秒和毫秒,例如1:20.66)輸出的gnu時間腳本 或hh :MM:ss(小時,分鐘和秒,例如1:43:38)。 我想將其轉換爲秒(以便比較它們並將它們繪製在圖形中)。將HH:MM:SS.mm轉換爲bash中的秒數
這是使用bash做到這一點的最簡單方法?
假設你可以運行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日期。
$ TZ=utc date -d '1970-01-01 1:43:38' +%s
6218
或將時區放在日期字符串中:「date -d'1970-01-01 1:43:38Z'+%s」 – 2012-02-08 07:45:51
如果你想純bash,那麼你可以這樣做
IFS=: read h m s <<<"${hms%.*}"
seconds=$((10#$s+10#$m*60+10#$h*3600))
的10#
部分是強制性的規定,則數字以基數10發做不到這一點,你會得到錯誤是否h
,m
或s
是08
或09
(因爲Bash用八進制來解釋前導0
的數字)。
只是注意日期會運行問題,如果您試圖解釋標準那些在[GTFS](https://developers.google.com/transit/gtfs/reference?hl=en#stop_timestxt)中看到的時間可能超過23小時。例如,27:05:00是合法的。 – 2015-09-14 15:54:45