PHP- 115102バイト
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);
2行目は、マイクロ秒から始まるコンポーネントの正確な値を(内部から外部へ)計算します。
短いバージョン(115バイト、読みやすいように2行にラップ):
$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);
また、埋め込み割り当てを使用して、浮動小数点数を使用して、ミリ秒、秒、分、および時間でのマイクロ秒の入力数の変換を計算します。次に、モジュラス演算子(%
)および10進数形式(%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
おそらくより良い(そしてより簡単だった)ことを理解しています。それでも、今では変更できません。