2012-02-14 309 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

相关问题