小从的外卖超时判断
-
小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。
-
已知小C在时刻
t1点了外卖,外卖平台上显示的预计送达时间为t2,而实际送达时间为t3。需要判断外卖是否超时。如果外卖超时,则输出"Yes";否则输出"No"。 -
实际送达时间与预计送达时间在
2小时之内。 解题思路:本题关键所用的值就是预计送达时间t2和实际送达时间t3,我们要做的就是求这两个值的差值,然后比较大小,如果差值小于0,证明实际送达时间小于预计送达时间,没有超时,如果差值大于0并且小于两个消失,说明,实际送达时间超过了预计送达时间,但是不超过题目所说的两个小时,说明超时了,但是如果实际送达时间超过了预计送达时间的两个小时,只有可能是在第二天送达(因为题目说了,实际送达时间与预计送达时间在两个小时内),所以我们有以下思路,将时间统一转换为有多少分钟,这里提供两种方法: 1.使用split方法,将string类型的time转换为数组splits,splits[0]就是小时,splits[1]就是分钟,将两个都转换为之后,比较他们的差值即可
public class Main {
public static String solution(String t1, String t2, String t3) {
// 解析时间字符串
int t2Minutes = parseTime(t2);
int t3Minutes = parseTime(t3);
int diff = t3Minutes - t2Minutes;
//大于两个小时,没有超时
if (diff > 120) {
return "No";
} else if (diff > 0) {
//小于两小时,大于0的超时
return "Yes";
} else {
//小于0没有超时
return "No";
}
}
// 将时间字符串转换为分钟数
private static int parseTime(String time) {
//将字符串形式的time解析出有多少分钟
String[] parts = time.split(":");
int hours = Integer.parseInt(parts[0]);
int minutes = Integer.parseInt(parts[1]);
//小时转换为分钟*60,然后加上分钟
return hours * 60 + minutes;
}
public static void main(String[] args) {
System.out.println(solution("18:00", "19:05", "19:05").equals("No"));
System.out.println(solution("23:00", "00:21", "00:23").equals("Yes"));
System.out.println(solution("23:05", "00:05", "23:58").equals("No"));
}
}
2.调用java提供的Duration.between(),里面的参数比较的是LocalTime类型,所以我们我们需要把string类型的格式转换为LocalTime类型,正好java里提供了LocalTime.parse()的可以转换为LocalTime类型的方法,但是同样的需要定义一个时间格式DateTiemFormatter,调用DateTimeFormatter.ofPattern("HH:mm"),就可以将我们的字符串类型的时间转换为LocalTime类型了。具体的代码展示如下:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class temp {
public static String solution(String t1, String t2, String t3) {
//定义时间格式
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
// 调用LocalTime.parse()方法,提供时间格式,将时间字符串转换为 LocalTime 对象
LocalTime estimatedDeliveryTime = LocalTime.parse(t2, timeFormatter);
LocalTime actualDeliveryTime = LocalTime.parse(t3, timeFormatter);
// 计算预计送达时间和实际送达时间的差值(以分钟为单位)
long deliveryTimeDiff = Duration.between(estimatedDeliveryTime, actualDeliveryTime).toMinutes();
System.out.println(deliveryTimeDiff);
//大于两个小时,没有超时
if (deliveryTimeDiff > 120) {
return "No";
} else if (deliveryTimeDiff > 0) {
//小于两个小时,大于0超时
return "Yes";
} else {
//小于0没有超时
return "No";
}
}
public static void main(String[] args) {
System.out.println(solution("18:00", "19:05", "19:05").equals("No"));
System.out.println(solution("23:00", "00:21", "00:23").equals("Yes"));
System.out.println(solution("23:05", "00:05", "23:58").equals("No"));
}
}