将日期和时间范围与 Java 进行比较
Compare Date and Time range with Java
我有这个输入:
{
"MONDAY" : "02:39:00"
}
需要与
比较的日期和时间
"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
的值为真。
我会通过使用两个地图来解决这个问题,第一个地图的键为日期,时间为值,第二个地图的值为时间。
并检查时间是否在这个时间之间。
您可以使用 gson 将 json 对象转换为 java 对象。
正如 Pranav balu 所说,对您的数据使用 Java objects/data 结构。使用像 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);
输出:
Is open? true
我正在利用您的时间字符串采用 ISO 8601 格式这一事实,并且 LocalTime
将此格式解析为默认格式,即没有任何显式格式化程序。秒数在格式中是可选的,因此 00:00
和 02:39:00
都会被解析。
我有这个输入:
{
"MONDAY" : "02:39:00"
}
需要与
比较的日期和时间 "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
的值为真。
我会通过使用两个地图来解决这个问题,第一个地图的键为日期,时间为值,第二个地图的值为时间。
并检查时间是否在这个时间之间。
您可以使用 gson 将 json 对象转换为 java 对象。
正如 Pranav balu 所说,对您的数据使用 Java objects/data 结构。使用像 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);
输出:
Is open? true
我正在利用您的时间字符串采用 ISO 8601 格式这一事实,并且 LocalTime
将此格式解析为默认格式,即没有任何显式格式化程序。秒数在格式中是可选的,因此 00:00
和 02:39:00
都会被解析。