2012-02-14 51 views
2

的絕對時間給出存儲格式爲:轉換字符串小時:分鐘:sec.milisec以秒

time = "000:03:07.447" 

如何此字符串一種優雅的方式轉換成秒?

更新:

至於建議的Harper89

3600*#1 + 60*#2 + #3 & @@ ToExpression[StringSplit["000:00:04.424", ":"]] 

索博爾奇建議使用AbsoluteTime 從數學的幫助:AbsoluteTime給出的總秒數自1900年1月1日開始,在你的時間區。

AbsoluteTime[{"000:03:07.447", {"Hour", ":", "Minute", ":", "Second", 
".", "Millisecond"}}] 
- AbsoluteTime[{"000:00:00.000", {"Hour", ":", "Minute", ":", "Second", 
".", "Millisecond"}}] 

這適用

+1

看來'AbsoluteTime'已經改變的版本7和8 – Szabolcs 2012-02-14 15:20:38

回答

4

正如harper89描述的,在數學

FromDigits[ToExpression /@ StringSplit[time, ":"], 60] 
4

分析字符串以形成每個之間的陣列:使用類似split()

  1. 對於在一個小時
  2. 第一組乘以的秒數
  3. 對於第二組乘以秒鐘的分鐘數
  4. 對於第三組,將總數加上

換句話說

totalseconds = array(0)*3600 + array(1)*60 + array(2) 

或者在vb.net代碼

Dim time As String = "000:3:7"   
    Dim a() As String 
    a = longstring.Split(":") 
    Dim TotalSeconds as Integer = (a(0) * 86400) + (a(1) * 3600) + a(2)) 
    Trace.WriteLine(TotalSeconds.toString) 

從mathmatica的標籤定義

不要與數學混淆(數學) 。

哎呀..

+0

的問題是關於在[數學](HTTP做之間:// wri.com/) – Szabolcs 2012-02-14 15:05:41

+3

@Szabolcs你不能責怪他;人們可以假設所有的* Mathematica *問題都會被髮布[他們所屬的地方](http://mathematica.stackexchange.com):-) – 2012-02-14 15:11:16

+1

啊,我正在閱讀它,因爲他正在尋找可以使用的技術。他編輯並且我明白他現在的意思。我的錯。 (但是,嘿,現在他知道分裂!) – sealz 2012-02-14 15:17:11

3

嘗試以下操作:

AbsoluteTime[{"000:03:07.447", 
     {"Hour", ":", "Minute", ":", "Second", ".", "Millisecond"}}] 

(* ==> 187.447 *) 

的關鍵是給一個明確的日期格式(見DateList[]的文檔)

此解決方案在數學8。看來在版本7(也可能在版本6中)需要糾正結果,如下所示:

AbsoluteTime[{"000:03:07.447", 
     {"Hour", ":", "Minute", ":", "Second", ".", "Millisecond"}}] - 
AbsoluteTime[{"0", {"Hour"}}] 
+0

我不認爲他想要這個,但他自己的* Mathematica *時代。 – 2012-02-14 15:09:40

+0

@ Mr.Wizard我的代碼正確地將其轉換爲秒,只需嘗試一下。我知道Mathematica認爲1900年1月1日是所有時間的開始,但這不是問題。 – Szabolcs 2012-02-14 15:10:44

+0

這會返回'3.534364987447000000000000 * 10^9' - 我想他只需要'187.447'。 – 2012-02-14 15:12:40

相關問題