PHP - 115 102 байта
Решение в 155 байтов (для удобства чтения обернуто здесь в 3 строки):
$a=$argv[1];
$h=($a-($m=($a=($a-($s=($a=($a-($t=($a=($a-($u=$a%1000))/1000)%1000))/1000)%60))/60)%60))/60;
printf("%02d:%02d:%02d:%03d:%03d",$h,$m,$s,$t,$u);
Вторая строка вычисляет (изнутри наружу) точные значения компонентов, начиная с микросекунд.
Более короткая версия (115 байт, для удобства чтения обернута в две строки):
$u=$argv[1];$h=($m=($s=($t=$u/1000)/1000)/60)/60;
printf("%02d:%02d:%02d:%03d:%03d",$h,$m%60,$s%60,$t%1000,$u%1000);
Он также использует встроенные назначения для вычисления числа входных микросекунд в миллисекундах, секундах, минутах и часах с использованием чисел с плавающей запятой. Оператор модуля ( %
) и формат десятичного числа ( %d
) printf()
затем используются, чтобы заставить их целые числа (дробная часть игнорируется).
Другое решение, которое использует функции даты (102 байта)
$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);
Часть часы: минуты: секунды обрабатывается функциями даты PHP, gmdate()
а strtotime()
миллисекунды и микросекунды извлекаются как строки из входного значения.
Использование:
$ php -r '$u=$argv[1];echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);' 7198898787; echo
01:59:58:898:787
hh:mm:ss.000000
, вероятно, он был бы лучше (и проще). Тем не менее, не могу изменить это сейчас.