转换字符串小时:分钟:秒.millisec到秒

时间:2012-02-14 14:39:19

标签: string parsing wolfram-mathematica

以这种格式存储的绝对时间:

time = "000:03:07.447"

如何以优雅的方式将此字符串转换为秒?

更新

正如Harper89所建议的

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

Szabolcs建议使用AbsoluteTime 来自Mathematica帮助:AbsoluteTime给出了自你的时区1900年1月1日开始以来的总秒数。

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

这两个都适用

3 个答案:

答案 0 :(得分: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的标签定义

      

    不要与数学(数学)混淆。

    OOPS ..

答案 1 :(得分:4)

正如harper89所述,在 Mathematica

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

答案 2 :(得分:3)

尝试以下方法:

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

(* ==> 187.447 *)

关键是提供明确的日期格式(请参阅DateList[])的文档

此解决方案适用于Mathematica 8.似乎在版本7(也可能在版本6中)需要更正结果,如下所示:

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