如何将1800秒格式化为MM:SS格式

时间:2019-01-08 18:27:00

标签: 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"
    }
    override fun onFinish() {
        textTimer.text = "Time is out"
    }
}
timer.start()
textTimer.text = "$timer"

如何在Kotlin中将1800 seconds格式化为30 min : 00 sec

4 个答案:

答案 0 :(得分:3)

您可以通过整数除法和取模(%)来获得数字
并使用padStart()格式化为2位数字:

val secs = 1800
val formatted = "${(secs / 60).toString().padStart(2, '0')} min : ${(secs % 60).toString().padStart(2, '0')} sec"
println(formatted)

将打印

30 min : 00 sec

答案 1 :(得分:2)

由于您以JVM为目标,因此应使用Java 8 Date / Time Api。您可以创建一个非常简洁的函数,如下所示:

fun countdown(s: Long) = with(LocalTime.ofSecondOfDay(s)) {
    String.format("%02d min :%02d sec", minute, second)
}

countdown(1800) // 30 min : 00 sec

推荐

  • 不要在呼叫站点(在onTick中)进行计算。这使得不必要的代码难以理解。为此创建一个单独的函数。

  • 这是一个简单的计算,但是请使用标准库提供的内容。首先,对代码进行了优化,其次,您可以轻松扩展该函数以计算工时等。未经测试的手工起草的代码容易出错。

答案 2 :(得分:1)

这是我目前的代码:

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"

enter image description here

答案 3 :(得分:0)

以下代码可以从毫秒(这是您最初的时间)转换为分钟和秒:

val milliseconds: Long = 1800000

val minutes = milliseconds / 1000 / 60
val seconds = milliseconds / 1000 % 60

println("$minutes min : $seconds sec")

输出:

30 min : 0 sec

编辑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 min : 00 sec