[英]Compare Date and Time range with Java
我有这个输入:
{
"MONDAY" : "02:39:00"
}
这是需要比较的 DAY 和时间
"availability" : {
"SUNDAY" : {
"from" : "00:00",
"to" : "10:00"
},
"MONDAY" : {
"from" : "00:00",
"to" : "10:00"
}
}
比较availability
实际上是否包含查询02:39:00
的时间在其中的 DAY 的最佳方法是什么。
因此,它可以用 Java 形式表示:
boolean isOpen = checkIfOpen("MONDAY", "02:39:00", availabilityJSONObject);
在这种情况下, isOpen
的值为 true。
我将通过使用两个地图来解决这个问题,其中键为日期,时间为第一张地图的值,时间为第二张地图的值。
并检查时间是否介于此时间之间。
您可以使用 gson 将 json 转换为 java 对象。
正如 Pranav balu 已经说过的那样,为您的数据使用 Java 对象/数据结构。 使用 Jackson 或 Gson 等 JSON 库将您的 JSON 输入转换为 Java 类型。 对于每日可用性范围,您将需要一个 Java 类型。 例如:
public class AvailabilityRange {
LocalTime opens;
LocalTime closes;
public AvailabilityRange(String from, String to) {
opens = LocalTime.parse(from);
closes = LocalTime.parse(to);
}
public boolean inRange(String timeString) {
LocalTime time = LocalTime.parse(timeString);
return (! time.isBefore(opens)) && time.isBefore(closes);
}
}
我提供了一个方便的构造函数和一个接受String
参数的方便的方法。 您可能需要一个构造函数和一个接受LocalTime
的方法,或两者兼而有之。
使用示例:
Map<DayOfWeek, AvailabilityRange> availability
= new EnumMap<DayOfWeek, AvailabilityRange>(
Map.of(DayOfWeek.SUNDAY, new AvailabilityRange("00:00", "10:00"),
DayOfWeek.MONDAY, new AvailabilityRange("00:00", "10:00")));
String dayString = "MONDAY";
String timeString = "02:39:00";
boolean isOpen;
AvailabilityRange availabilityForDay
= availability.get(DayOfWeek.valueOf(dayString));
if (availabilityForDay == null) {
isOpen = false;
} else {
isOpen = availabilityForDay.inRange(timeString);
}
System.out.println("Is open? " + isOpen);
输出:
开了? 真的
我正在利用您的时间字符串采用 ISO 8601 格式这一事实, LocalTime
将此格式解析为默认格式,即没有任何显式格式化程序。 秒在格式中是可选的,因此00:00
和02:39:00
都被解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.