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);
第二行从微秒开始计算(从内部到外部)组件的确切值。
较短的版本(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);
hour:minutes:seconds部分由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
可能会更好(更容易)。不过,现在不能去更改它。