Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将1800秒格式化为MM:SS格式_Android_Kotlin_Countdowntimer - Fatal编程技术网

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

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"

我有以下用于简单倒计时的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秒
格式化为
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
    中)进行计算。这使得代码很难理解。为此创建一个单独的函数

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


为什么投票率会上升?完全不是期望的结果:“如何将1800秒格式化为MM:SS格式”@Sumit,非常感谢您的回答,但您的代码对我不起作用。因为当倒数到0位数时,秒和分钟没有2位数的填充。是的,对不起。错过了那个细节。。@forpas提到的padStart是正确的。我已经编辑了我的答案,也包括了这一点。非常感谢!你是对的。您的代码使用零位数。
fun countdown(s: Long) = with(LocalTime.ofSecondOfDay(s)) {
    String.format("%02d min :%02d sec", minute, second)
}

countdown(1800) // 30 min : 00 sec