PHP - 115 102 byte
Solusi dalam 155 byte (dibungkus di sini pada 3 baris untuk dibaca):
$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);
Baris kedua menghitung (dari dalam ke luar) nilai yang tepat dari komponen yang dimulai dengan mikrodetik.
Versi lebih pendek (115 byte, terbungkus dua baris agar mudah dibaca):
$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);
Ini juga menggunakan tugas yang tertanam untuk menghitung konversi jumlah input mikrodetik dalam milidetik, detik, menit dan jam menggunakan angka floating point. Operator modulus ( %
) dan format angka desimal ( %d
) dariprintf()
kemudian digunakan untuk memaksa mereka ke angka integer (bagian fraksional diabaikan).
Solusi lain yang menggunakan fungsi tanggal (102 byte)
$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);
Jam: menit: bagian detik ditangani oleh fungsi tanggal PHP gmdate()
danstrtotime()
, mili- dan mikro-detik diekstraksi sebagai string dari nilai input.
Pemakaian:
$ 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
mungkin akan lebih baik (dan lebih mudah). Tetap saja, tidak bisa mengubahnya sekarang.