计算结束时间和开始时间差,并验证在android中输入的时间

时间:2016-06-17 19:05:11

标签: java android

我必须计算两次之间的时差(结束时间 - 开始时间)。时间是hh:mm格式,我想要整数MINUTS的差异? 还有一件事如何验证用户输入的时间是1到24小时?

1 个答案:

答案 0 :(得分:1)

使用此API将其解析为hava LocalTime

LocalTime.parse(userInput, hhmmFormatter)

(请参阅此处的API文档https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html#parse-java.lang.CharSequence-java.time.format.DateTimeFormatter-

对两个输入执行此操作。根据文档,如果格式与hh:mm(由hhmmFormatter实例定义)不匹配,此方法将抛出DateTimeParseException,因此您可以捕获它并按照您的意愿处理它。

你可以使用DateTimeFormatter.ofPattern自己创建hhmmFormatter,但我建议只使用标准

 DateTimeFormatter.ISO_LOCAL_TIME

完全适合您的情况。更多细节https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_LOCAL_TIME

所以你可以简单地做

try {
  // NOTE: you can move these into their own try/catch so you can handle bad user input separately if you wish
  final LocalTime time1 = LocalTime.parse(userInput1, DateTimeForamatter.ISO_LOCAL_TIME);
  final LocalTime time2 = LocalTime.parse(userInput2, DateTimeForamatter.ISO_LOCAL_TIME);
  final long differenceInNanos = (time2.toNanoOfDay() - time1.toNanoOfDay());
  final long differenceInSeconds = TimeUnit.NANOSECONDS.toSeconds(differenceInNanos)
}
catch(DateTimeParseException e){
   // TODO code to handle bad user input
}

(TimeUnit https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html的文档)

请注意,您在问题中没有注明是否要处理用户可能指定天数的情况,因此我只向您展示LocalTime。您可以轻松地将其转换为最常见的ZonedDateTime案例,并执行非常类似的操作。