代码之家  ›  专栏  ›  技术社区  ›  Andy Jazz

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

  •  0
  • Andy Jazz  · 技术社区  · 6 年前

    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"
    

    如何格式化 1800 seconds 30 min : 00 sec 在科特林 ?

    4 回复  |  直到 6 年前
        1
  •  6
  •   forpas    6 年前

    通过整数除法和模运算得到数字( % )
    padStart() :

    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
    
        2
  •  3
  •   Willi Mentzel user670265    6 年前

    因为您的目标是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

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

        3
  •  1
  •   Andy Jazz    6 年前

    下面是我的代码目前的样子:

    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

        4
  •  0
  •   Sumit robertklep    6 年前

    以下代码可以从毫秒(您最初拥有的)转换为分和秒:

    val milliseconds: Long = 1800000
    
    val minutes = milliseconds / 1000 / 60
    val seconds = milliseconds / 1000 % 60
    
    println("$minutes min : $seconds sec")
    

    输出:

    30 min : 0 sec

    编辑1 :

    其代码为:

    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