PHP - 115 102 bayt
155 baytlık bir çözüm (okunabilirlik için buraya 3 satıra sarılı):
$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);
İkinci satır (içeriden dışarıya) mikrosaniye ile başlayan bileşenlerin kesin değerlerini hesaplar.
Kısa versiyon (okunabilirlik için iki satıra sarılı 115 bayt):
$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);
Ayrıca, kayan nokta sayılarını kullanarak mikrosaniyelerin giriş sayısını milisaniye, saniye, dakika ve saat cinsinden dönüştürmeyi hesaplamak için gömülü atamaları kullanır. Modül operatörü ( %
) ve ondalık sayı formatı ( %d
) printf()
daha sonra onları tam sayılara zorlamak için kullanılır (kesirli kısım yoksayılır).
Tarih işlevlerini kullanan başka bir çözüm (102 bayt)
$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);
Hours: minutes: seconds bölümü PHP tarih işlevleriyle işlenir gmdate()
ve strtotime()
milli ve mikro saniye giriş değerinden dizge olarak çıkarılır.
Kullanımı:
$ 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
muhtemelen daha iyi (ve daha kolay) olacağını fark ettim. Yine de, şimdi değiştiremem.