Что нового

Помогите доработать функцию перевода времени в миллисекунды

uritalex

Новичок
Сообщения
197
Репутация
3
И снова добрый день/вечер/утро
Занялся созданием функции для своего скрипта (смело сказано) и столкнулся с проблемой перевода времени в миллисекунды для использования в дальнейшем.
То что у меня есть:
Код:
Func _TimeMilsec($sInput)
    Local $sInput 
    Local $_Sec = StringRegExpReplace($sInput, '(\d{2}):(\d{2}):(\d{2})', ' $3 ')
         If @error Then $_Sec = 0
         ConsoleWrite($_Sec & @CRLF)
    Local $_Min = StringRegExpReplace($sInput, '(\d{2}):(\d{2}):(\d{2})', ' $2 ')
         If @error Then $_Min = 0
         ConsoleWrite($_Min & @CRLF)
    Local $_H = StringRegExpReplace($sInput, '(\d{2}):(\d{2}):(\d{2})', ' $1 ')
         If @error Then $_H = 0
         ConsoleWrite($_H & @CRLF)
    Local $_Time = (($_H * 3600) + ($_Min *60) + $_Sec)*1000
         ConsoleWrite($_Time & @CRLF)
EndFunc


Функция работает нормально только при условии что время в формате 00:00:00
так время 01:52:03 отрабатывает как нужно и показывает 6723000 миллисекунд
Однако другие форматы времени вызывают ступор у меня :(
По этой причине прошу Вас подсказать как доработать функцию для корректной работы с такими данными:
1:35 (мин:сек), 0:26 (мин:сек), 25:12 (мин:сек), 1:1:1 (ч:м:с) и так далее.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
uritalex
Код:
#include <Date.au3>

$idDate = GUICtrlCreateDate("", 10, 10, 100, 20, $DTS_TIMEFORMAT)

$aData = StringSplit(GUICtrlRead($idDate), ":", 2)
; $aData = StringRegExp(GUICtrlRead($idDate), "\d\d", 3)

_TimeToTicks($aData[0], $aData[1], $aData[2])
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Эм... спасибо смотрел эту функцию но она хороша когда время в определенном формате т.е. если время 0:01 сек. то её указывать нужно как 00:00:01
Но мне это не сильно подходит :( так как время парсится с разных сайтов и имеет разный формат. Затем уж добавляется в скрипт.
Полагаю что нужно для начала добавить логику с регуляркой на определение формата времени и потом проводить её обработку... но как ...


Добавлено:
Сообщение автоматически объединено:

:laugh: :IL_AutoIt_1:
Благодарю уважаемые за наводку сваял функцию по своим нуждам теперь буду тестировать. Если есть предложения по улучшению выслушаю очень внимательно :smile:
Код:
#include <Date.au3>

_Time_to_milsec ("02:03")

Func _Time_to_milsec ($idDate)
	Local $_Simvol =  StringLen($idDate)
	Local $aData = StringSplit($idDate, ":", 2)
	If $_Simvol <= 3 Then
		$_Time_to = _TimeToTicks("0", "0", $aData[0])
		ConsoleWrite($_Time_to & @CRLF)
	ElseIf $_Simvol >= 3 AND $_Simvol <= 5 Then
		$_Time_to = _TimeToTicks("0", $aData[0], $aData[1])
		ConsoleWrite($_Time_to & @CRLF)
	Else
		$_Time_to = _TimeToTicks($aData[0], $aData[1], $aData[2])
		ConsoleWrite($_Time_to & @CRLF)
	EndIf
EndFunc
 
A

Alofa

Гость
Код:
Local $aTime[6] = ['01:35', '50;0', '0:26','25:12', '100:04:9', '1:01:1']

For $i = 0 To 5
	ConsoleWrite(_Time_to_milsec($aTime[$i]) & @LF)
Next

Func _Time_to_milsec($idDate)
	Local $sOutput = StringRegExpReplace($idDate, '^(?:(\d{0,2}):)?(\d{0,2}):(\d{0,2})$', '(0$1*3600+$2*60+$3)*1000')
	If $sOutput = $idDate Then Return '!) Неправильно задан формат'
	Return '+) ' & Execute($sOutput)
EndFunc
 
Верх