我有一个由json返回的日期,它在以下变量中作为字符串:
val dateEvent = "2019-12-28 21:00:00"
我需要进行的计算是要知道当前日期还剩下多少天小时。
我找到了一些解决方案,但这些解决方案用作输入“ 2019-12-28”,我的格式包括时间。
答案 0 :(得分:3)
自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
和Date
类的设计很差,而且已经过时了。我最诚实的看法是,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
注意:事件日期应始终是当前日期的将来日期。