Автор Тема: Помогите доработать функцию перевода времени в миллисекунды  (Прочитано 403 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн uritalex [?]

  • Новичок
  • *
  • Сообщений: 175
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
И снова добрый день/вечер/утро
Занялся созданием функции для своего скрипта (смело сказано) и столкнулся с проблемой перевода времени в миллисекунды для использования в дальнейшем.
То что у меня есть:
Код: AutoIt [Выделить]
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 (ч:м:с) и так далее.

Русское сообщество AutoIt


Оффлайн Khaibit [?]

  • Новичок
  • *
  • Сообщений: 38
  • Репутация: 7
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.6.1

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3224
  • Репутация: 848
    • Награды
  • Версия AutoIt: 3.3.14.0
uritalex
Код: AutoIt [Выделить]
#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])


Оффлайн uritalex [?]

  • Новичок
  • *
  • Сообщений: 175

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Эм... спасибо смотрел эту функцию но она хороша когда время в определенном формате т.е. если время 0:01 сек. то её указывать нужно как 00:00:01
Но мне это не сильно подходит :( так как время парсится с разных сайтов и имеет разный формат. Затем уж добавляется в скрипт.
Полагаю что нужно для начала добавить логику с регуляркой на определение формата времени и потом проводить её обработку... но как ...


Добавлено: Апрель 19, 2017, 10:49:43
:laugh: :IL_AutoIt_1:
Благодарю уважаемые за наводку сваял функцию по своим нуждам теперь буду тестировать. Если есть предложения по улучшению выслушаю очень внимательно :)
Код: AutoIt [Выделить]
#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
 

« Последнее редактирование: Апрель 19, 2017, 10:57:57 от uritalex »

Русское сообщество AutoIt


Помечен как лучший ответ пользователем uritalex Отправлен Апрель 21, 2017, 14:25:57

Онлайн Alofa [?]

  • Скриптер
  • ****
  • Сообщений: 997
  • Репутация: 128
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Код: AutoIt [Выделить]
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

----------------------- Вы думаете, всё так просто? Да, всё просто. Но совсем не так. -----------------------
Альберт Эйнштейн.

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
6974 Просмотров
Последний ответ Декабрь 06, 2009, 18:23:35
от CreatoR
2 Ответов
3495 Просмотров
Последний ответ Апрель 02, 2011, 18:46:48
от thefrog
5 Ответов
3578 Просмотров
Последний ответ Апрель 03, 2011, 16:46:30
от (-_-)
4 Ответов
3829 Просмотров
Последний ответ Ноябрь 20, 2011, 21:42:30
от gregaz
1 Ответов
1970 Просмотров
Последний ответ Январь 06, 2012, 00:39:24
от madmasles
8 Ответов
3482 Просмотров
Последний ответ Май 07, 2012, 01:12:57
от ArtInt
2 Ответов
1874 Просмотров
Последний ответ Октябрь 19, 2012, 16:09:33
от madmasles
4 Ответов
2089 Просмотров
Последний ответ Декабрь 28, 2012, 18:14:59
от AZJIO
0 Ответов
1011 Просмотров
Последний ответ Декабрь 28, 2012, 15:10:24
от CreatoR
8 Ответов
1913 Просмотров
Последний ответ Ноябрь 03, 2014, 13:07:12
от fortages