我正在开发一个程序,我在其中搜索两个文本文件并比较它们(这是 JetBrains Academy 的一项任务)。最后,我的任务是输出执行此操作所需的时间,格式为“mm:ss:ms”。图片作为参考:
这是我为实现这一目标而编写的代码。我想这很不正确,所以我为此道歉,我学习 Kotlin 和编程不久。
val millis = System.currentTimeMillis()
val time = String.format("%1\$tM min. %1\$tS sec. %1\$tL ms.", millis);
println("Start searching...")
println("Found $number. Time taken: $time ")
我得到的输出是这样的:
> Start searching...
Found 864 / 864. Time taken: 19 min. 53 sec. 611 ms.
分钟和秒是错误的,因为它花了不到一秒钟。我对 ms 表示怀疑,因为它们适合花费多少时间。有人可以帮助我解决我做错了什么吗?谢谢!
来自System.currentTimeMillis()
:
返回当前时间与 UTC 1970 年 1 月 1 日午夜之间的差值(以毫秒为单位)。
因此,您在输出中看到的是Hh:mm:ss
1970-01-01T00:00:00 到现在为止所用时间的一部分。
您真正想要的是花费的时间,即时间测量的开始和结束之间的差异。
val start = System.currentTimeMillis()
// do your processing
val end = System.currentTimeMillis()
val time = String.format("%1$tM min. %1$tS sec. %1$tL ms.", end - start)
这应该会给你一个适当的输出。
正如评论中所述,某些时区会发生奇怪的事情。并且String.format()
似乎无法配置(至少我没有找到任何东西)。
如果你真的想成为安全起见,你可以使用的回答所建议@SergeyAfinogenov,但也有一些小的调整:
val minutes = duration.getSeconds() / 60
val seconds = duration.getSeconds() - minutes * 60
val millis = duration.getNano() / 1_000_000
val time = String.format("%d min. %d sec. %d ms.%n", minutes, seconds, millis)
这有效地手动计算了不同的部分(分钟、秒、毫秒)Duration
,然后相应地格式化它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句