Что нового

[Новичок, Осваивающий] Перевод миллисекунд в формат ДД:ЧЧ:ММ:СС.МСС

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Дано количество миллисекунд. Задача состоит в построении строки формата ДД:ЧЧ:ММ:СС.МСС из данного количества миллисекунд без использование каких-либо библиотек. Например 245382036 миллисекунд - это 2 дня 20 часов 9 минут 42 секунды и 36 миллисекунд, из которых надо сформировать строку
Код:
2:20:09:42.036
Ведущие нули желательны, но не обязательны. Ответ скрывайте под тэгом спойлера.

PS: Обратите внимание на статус участников, которые могут принять участие в конкурсе
 

Microteam

Осваивающий
Сообщения
74
Репутация
34
Здравствуйте, возьмем число 2010201022 и переведем в переведем формат даты)

Код:
$m = 2010201022;

$day = Round($m / (86400 * 1000))
$hour = Mod($m / 86400 * 1000) / 3600
$minutes = Mod($day / 3600 * 1000) /60
$seconds = Mod($hour / 60 * 1000);

;;; Вот так наверное) Писал на скоряк)
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Код:
#include <Date.au3>

Global $Days, $iHour, $iMins, $iSecs
Global $iTicks = 245382036

_TicksToTime($iTicks, $iHour, $iMins, $iSecs)
$Days = StringFormat('%02d', $iHour/24)

ConsoleWrite($Days & ":" & StringFormat('%02d:%02d:%02d', $iHour - $Days*24, $iMins, $iSecs)&"."&StringRight($iTicks, 3))
 
Автор
kaster

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Добавил в условие. Не рекомендуется использование каких-либо библиотек.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Код:
Global $iTicks = 245382036

$iDays = StringFormat('%02d', $iTicks/ (1000*60*60*24))
ConsoleWrite($iDays&":")

$iHour = StringFormat('%02d', $iTicks/ (1000*60*60))
ConsoleWrite(StringFormat('%02d', $iHour - $iDays*24)&":")

$iMins = StringFormat('%02d', $iTicks/ (1000*60))
ConsoleWrite(StringFormat('%02d', $iMins - $iHour*60) &":")

$iSecs = StringFormat('%02d', $iTicks/ (1000))
ConsoleWrite(StringFormat('%02d', $iSecs - $iMins*60) &".")

ConsoleWrite(StringRight($iTicks, 3))



Код:
Global $iTicks = 245382036

$iDays = StringFormat('%02d', $iTicks/ (1000*60*60*24))
$iHour = StringFormat('%02d', $iTicks/ (1000*60*60))
 $Hour = StringFormat('%02d', $iHour - $iDays*24)
$iMins = StringFormat('%02d', $iTicks/ (1000*60))
 $Mins = StringFormat('%02d', $iMins - $iHour*60)
$iSecs = StringFormat('%02d', $iTicks/ (1000))
 $Secs = StringFormat('%02d', $iSecs - $iMins*60)
$MSecs = StringRight($iTicks, 3)

$REZ = $iDays&":"&$Hour&":"&$Mins &":"&$Secs &"."&$MSecs
MsgBox(0, "", $REZ)
 
Автор
kaster

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Microteam
твой ответ не засчитывается, потому что
Microteam [?]
;;; Вот так наверное) Писал на скоряк)
и потому что, нет выходного параметра.
 
Автор
kaster

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
заслуженная победа у ---Zak--- 8)

вот мое решение, практически полностью повторяет решение победителя

Код:
$msec = 885858855
$MSS = 1000
$MSM = $MSS*60
$MSH = $MSM*60
$MSD = $MSH*24
$D = Floor($msec/$MSD/1)
$MS = Mod($msec, $MSD)
$H = Floor($MS/$MSH)
$MS = Mod($MS, $MSH)
$M = Floor($MS/$MSM)
$MS = Mod($MS, $MSM)
$S = Floor($MS/$MSS)
$MS = Mod($MS, $MSS)
$fmt = '%d:%02d:%02d:%02d.%03d'
$str = StringFormat($fmt, $D, $H, $M, $S, $MS)
ConsoleWrite("Milliseconds given:" & @TAB & $msec & @CRLF)
ConsoleWrite("Formatted version:" & @TAB & $str & @CRLF)
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Раз конкурс уже завершен, вот мой пример скрипта
Код:
$iMSec = Random(100000000, 999999999, 1)
$iT = TimerInit()
$iDs = Int($iMSec / 1000 / 60 / 60 / 24)
$iHr = Int(Mod($iMSec, 1000 * 60 * 60 * 24) / 1000 / 60 / 60)
$iMn = Int(Mod($iMSec, 1000 * 60 * 60) / 1000 / 60)
$iSc = Int(Mod($iMSec, 1000 * 60) / 1000)
ConsoleWrite("Milliseconds: " & $iMSec & " | Formatted: " & $iDs & ":" & $iHr & ":" & $iMn & ":" & $iSc & "." & Mod($iMSec, 1000) & " | Time: " & TimerDiff($iT) & @CR)


Код:
$iT = TimerInit()
$iTicks = Int($iMSec / 1000)
$iDs = Int($iTicks / 86400) ; 24 * 3600
$iTicks = Mod($iTicks, 86400)
$iHr = Int($iTicks / 3600)
$iTicks = Mod($iTicks, 3600)
$iMn = Int($iTicks / 60)
$iSc = Mod($iTicks, 60)
ConsoleWrite("Milliseconds: " & $iMSec & " | Formatted: " & $iDs & ":" & $iHr & ":" & $iMn & ":" & $iSc & "." & Mod($iMSec, 1000) & " | Time: " & TimerDiff($iT) & @CR)
 
Верх