Android 如何将1800秒格式化为MM:SS格式
我有以下用于简单倒计时的Kotlin代码:Android 如何将1800秒格式化为MM:SS格式,android,kotlin,countdowntimer,Android,Kotlin,Countdowntimer,我有以下用于简单倒计时的Kotlin代码: val thousand: Long = 1000 val timer = object: CountDownTimer(1800000, 1000) { override fun onTick(millisUntilFinished: Long) { var timeResult = millisUntilFinished/thousand textTimer.text = "$timeResult"
val thousand: Long = 1000
val timer = object: CountDownTimer(1800000, 1000) {
override fun onTick(millisUntilFinished: Long) {
var timeResult = millisUntilFinished/thousand
textTimer.text = "$timeResult"
}
override fun onFinish() {
textTimer.text = "Time is out"
}
}
timer.start()
textTimer.text = "$timer"
如何将Kotlin中的
1800秒
格式化为30分钟:00秒
?以下代码可以从毫秒(即您最初拥有的)转换为分钟和秒:
val milliseconds: Long = 1800000
val minutes = milliseconds / 1000 / 60
val seconds = milliseconds / 1000 % 60
println("$minutes min : $seconds sec")
输出:
30分钟:0秒
编辑1:
如果您严格要求从秒到分和秒,只需将额外的除法去掉1000即可
其代码为:
val seconds: Long = 1800
val minutes = milliseconds / 60
val seconds = milliseconds % 60
println("$minutes min : $seconds sec")
原始问题中的代码包含毫秒,这就是为什么我从毫秒开始提到它
编辑2:
遗漏了两位数的格式
@forpas使用.toString().padStart(2,'0')
的回答将给出正确的格式化输出。因此,正确的代码应该是:
val milliseconds: Long = 1800000
val minutes = milliseconds / 1000 / 60
val seconds = milliseconds / 1000 % 60
println("{$minutes.toString().padStart(2, '0')} min : {$seconds.toString().padStart(2, '0')} sec")
输出:
30分钟:00秒
通过整数除法和模(%
)使用
padStart()
将格式设置为2位:
将打印
30 min : 00 sec
下面是我的代码目前的样子:
val timer = object: CountDownTimer(1800000, 1000) {
override fun onTick(millisUntilFinished: Long) {
val timeResult =
"${(millisUntilFinished / 1000 / 60).toString().padStart(2, '0')}:" +
"${(millisUntilFinished / 1000 % 60).toString().padStart(2, '0')} "
textTimer.text = "$timeResult"
}
override fun onFinish() {
textTimer.text = "Time is out"
}
}
timer.start()
textTimer.text = "$timer"
因为您的目标是JVM,所以应该使用Java8日期/时间Api。您可以创建一个非常简洁的函数,如下所示:
fun countdown(s: Long) = with(LocalTime.ofSecondOfDay(s)) {
String.format("%02d min :%02d sec", minute, second)
}
countdown(1800) // 30 min : 00 sec
推荐:
- 不要在调用站点(在
中)进行计算。这使得代码很难理解。为此创建一个单独的函数onTick
- 这是一个简单的计算,但使用标准库提供的内容。首先,对代码进行了优化,其次,您可以轻松地扩展该函数以计算小时数等。未经测试,手工起草的代码容易出错
fun countdown(s: Long) = with(LocalTime.ofSecondOfDay(s)) {
String.format("%02d min :%02d sec", minute, second)
}
countdown(1800) // 30 min : 00 sec