在 Kotlin 中获取时间字符串和当前时间之间的持续时间的正确方法

问题描述 投票:0回答:2

在 Kotlin 中获取时间字符串和实际时间之间的持续时间的正确且最简单的方法是什么?

我有以下时间字符串(timeStr):“18:00:00” 最后我喜欢这样的字符串:“x 小时 y 分钟到...”

我目前的解决方案:

val diff: Long = (LocalTime.parse(timeStr).toSecondOfDay() - LocalTime.now().toSecondOfDay()).toLong()
val duration: LocalTime = LocalTime.ofSecondOfDay(diff)
outStr = duration.hour + "hours and " + duration.minute + " minutes to ..."

我知道这个解决方案很容易出错,所以我正在寻找一个干净的解决方案。我最近才开始使用 Kotlin,还不熟悉其可能性。

kotlin duration localtime
2个回答
0
投票

正如“匿名”评论的那样,您可以使用

Duration
类来实现此目的:

fun getDuration(timeStr: String): String {
    val time = LocalTime.parse(timeStr)
    val now = LocalTime.now()
    val duration = Duration.between(now, time)
    val hours = duration.toHours()
    val minutes = duration.minusHours(hours).toMinutes()
    return if (hours == 0L) {
        "$minutes minutes to ..."
    } else if (minutes == 0L) {
        "$hours hours to ..."
    } else {
        "$hours hours and $minutes minutes to ..."
    }
}

0
投票

我建议您使用

java.time.Duration
,它以 ISO-8601 标准为模型,并作为 JSR-310 实现的一部分随 Java-8 一起引入。 Java-9 引入了一些更方便的方法。

演示:

public class Main {
    public static void main(String[] args) {
        Duration duration = Duration.between(LocalTime.now(), LocalTime.parse("18:00:00"));
        // Default format
        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        String formattedDuration = String.format("%d hours and %d minutes", duration.toHours(),
                duration.toMinutes());
        System.out.println(formattedDuration);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedDuration = String.format("%d hours and %d minutes", duration.toHoursPart(),
                duration.toMinutesPart());
        System.out.println(formattedDuration);
        // ##############################################################################
    }
}

示例运行的输出:

PT47M23.239687S
0 hours and 47 minutes
0 hours and 47 minutes

在线演示

Trail:日期时间了解现代日期时间 API。

© www.soinside.com 2019 - 2024. All rights reserved.