PHP - 115 102 octets
Une solution en 155 octets (enveloppée ici sur 3 lignes pour plus de lisibilité):
$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);
La deuxième ligne calcule (de l'intérieur vers l'extérieur) les valeurs exactes des composants en commençant par les microsecondes.
La version plus courte (115 octets, sur deux lignes pour plus de lisibilité):
$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);
Il utilise également des affectations intégrées pour calculer la conversion du nombre d'entrée de microsecondes en millisecondes, secondes, minutes et heures à l'aide de nombres à virgule flottante. L'opérateur de module ( %
) et le format de nombre décimal ( %d
) deprintf()
sont ensuite utilisés pour les forcer à des nombres entiers (la partie fractionnaire est ignorée).
Une autre solution qui utilise les fonctions de date (102 octets)
$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);
La partie heures: minutes: secondes est gérée par les fonctions de date PHP gmdate()
et strtotime()
les milli- et micro-secondes sont extraites sous forme de chaînes de la valeur d'entrée.
Usage:
$ 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
aurait probablement été meilleur (et plus facile). Pourtant, je ne peux pas changer ça maintenant.