Datetime 两个localDate之间的差异
我有一个json返回的日期,它以字符串形式存在于以下变量中:Datetime 两个localDate之间的差异,datetime,kotlin,Datetime,Kotlin,我有一个json返回的日期,它以字符串形式存在于以下变量中: val dateEvent=“2019-12-28 21:00:00” 我需要的计算是知道当前日期还剩多少天、多少小时、多少分钟 我已经找到了一些解决方案,但这些方案用作输入“2019-12-28”,并且我有包含时间的格式。使用以下功能: fun counterTime(eventtime: String): String { var day = 0 var hh = 0 var mm = 0 try
val dateEvent=“2019-12-28 21:00:00”
我需要的计算是知道当前日期还剩多少天、多少小时、多少分钟
我已经找到了一些解决方案,但这些方案用作输入“2019-12-28”,并且我有包含时间的格式。使用以下功能:
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"
}
}
柜台时间(2019-08-27 20:00:00)
这将返回24天6小时57分钟
注意:事件日期应始终是当前日期的未来日期。java.time
由于您可以使用Java 9(很抱歉,我只能编写Java代码):
刚才我运行代码时,输出是:
145天4小时19分钟
在Java6、7和8中,持续时间的格式有点冗长,请搜索how
避免使用SimpleDateFormat和朋友
在另一个答案中使用的
SimpleDateFormat
和Date
类设计糟糕,而且早已过时。我最诚实的观点是,2019年不应该有人使用它们。现代java日期和时间API java.time非常适合使用。LocalDate,顾名思义,就是日期。它不包含时间。LocalDateTime包含一个时间,但它并不表示精确的瞬间,而是一个挂钟日期和时间。使用ZoneDateTime。(由于DST对这个差异有影响,因此您必须确定一个时区来计算这个日期时间和现在之间的时间)。javadoc是你的朋友。输入ZoneDateTime是GMT-05:00这不是时区,这是偏移量。在世界许多地方,冬季的偏移量不同于夏季的偏移量。例如,在时区“欧洲/巴黎”中,偏移量夏季为2小时,冬季为1小时。正是这一点使得使用实际时区非常重要,否则结果可能会偏离一个小时。我对时区不感兴趣,它只是减去两个示例日期2019-12-28 21:00:00-2019-12-30 21:00:00
这些日期是只适用于一个国家的迪斯科舞厅活动的日期。我知道要做减法,我必须将字符串转换为日期类型,要格式化它,我必须将其格式化为GMT-05:00示例:Wed Aug 28 21:00:00 GMT-05:00 2019
,所以使用时区“America/Lima”
,我认为这假设了默认区域设置的时区。如果这不是您期望的时区,它可能会在任何持续时间内给出错误的结果,包括任一时区使时钟向前或向后的时间。(在处理时间时,始终值得考虑时区…)事件从json获取,以在recyclerview中显示它们,当满足日期时,事件不再存在。活动针对特定国家(当地时间)。检查json的日期,我看到它是在UTC{“UTC_start_date”:“2019-08-28 21:00:00”}
,将该函数改编为UTCFYI会很有趣,非常麻烦的日期时间类,例如,java.text.SimpleDateFormat
现在被java 8和更高版本中内置的类所取代。看见
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());