конвертировать строки часов: минут: сек.милисек в секунды - PullRequest
2 голосов
/ 14 февраля 2012

Абсолютное время указано в сохраненном в этом формате:

time = "000:03:07.447"

Как эту строку можно элегантно преобразовать в секунды?

Обновление:

По предложению Harper89

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

Сабольч предложил использовать AbsoluteTime Из справки Mathematica: AbsoluteTime показывает общее количество секунд с начала 1 января 1900 года в вашем часовом поясе.

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

Это работает как

Ответы [ 3 ]

4 голосов
/ 14 февраля 2012

Как описано в harper89, в Mathematica :

FromDigits[ToExpression /@ StringSplit[time, ":"], 60]
4 голосов
/ 14 февраля 2012

Разобрать строку, чтобы сформировать массив между каждым из: используя что-то вроде split()

  1. Для первого набора умножьте на количество секунд в часе
  2. Длявторой набор умножить на количество секунд в минуте
  3. Для третьего набора добавить число к итогу

Другими словами

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

Не путать с математикой (математикой).

ООП ..

3 голосов
/ 14 февраля 2012

Попробуйте следующее:

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"}}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...