两个localDate之间的区别

时间:2019-08-03 16:24:41

标签: datetime kotlin

我有一个由json返回的日期,它在以下变量中作为字符串:

val dateEvent = "2019-12-28 21:00:00"

我需要进行的计算是要知道当前日期还剩下多少天小时。

我找到了一些解决方案,但这些解决方案用作输入“ 2019-12-28”,我的格式包括时间。

2 个答案:

答案 0 :(得分:3)

java.time

自Java 9开始,您就可以做(抱歉,我只能编写Java代码):

    DateTimeFormatter jsonFormatter = DateTimeFormatter.ofPattern("u-M-d H:mm:ss");
    String dateEvent = "2019-12-28 21:00:00";
    Instant eventTime = LocalDateTime.parse(dateEvent, jsonFormatter)
            .atOffset(ZoneOffset.UTC)
            .toInstant();
    Duration timeLeft = Duration.between(Instant.now(), eventTime);
    System.out.format("%d days %d hours %d minutes%n",
            timeLeft.toDays(), timeLeft.toHoursPart(), timeLeft.toMinutesPart());

我刚才运行代码时,输​​出为:

  

145天4小时19分钟

在Java 6、7和8中,持续时间的格式比较罗word,请搜索方式。

避免使用SimpleDateFormat和朋友

另一个答案中使用的SimpleDateFormatDate类的设计很差,而且已经过时了。我最诚实的看法是,2019年没人应该使用它们。java.time,现代的Java日期和时间API,要好用得多。

答案 1 :(得分:1)

使用以下功能:

fun counterTime(eventtime: String): String {
    var day = 0
    var hh = 0
    var mm = 0
    try {
        val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        val eventDate = dateFormat.parse(eventtime)
        val cDate = Date()
        val timeDiff = eventDate.time - cDate.time

        day = TimeUnit.MILLISECONDS.toDays(timeDiff).toInt()
        hh = (TimeUnit.MILLISECONDS.toHours(timeDiff) - TimeUnit.DAYS.toHours(day.toLong())).toInt()
        mm =
            (TimeUnit.MILLISECONDS.toMinutes(timeDiff) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(timeDiff))).toInt()
    } catch (e: ParseException) {
        e.printStackTrace()
    }

    return if (day == 0) {
        "$hh hour $mm min"
    } else if (hh == 0) {
        "$mm min"
    } else {
        "$day days $hh hour $mm min"
    }
}

counterTime(2019-08-27 20:00:00)

这将返回24 days 6 hour 57 min

注意:事件日期应始终是当前日期的将来日期。