假设您有限制时间,无论出于何种原因,您都必须在其中限制时间。让我们将这些限制时间转换为Java中的实际Date对象。我正在使用
Date today = new Date();
要获取今天的日期,您可以使用任意日期。
然后,我将今天的日期(一年中的月日)与我在两个字符串中定义的时间合并,但可以从对象等中获取。
private static Date combineDates(Date date,Date time) {
Calendar cal = Calendar.getInstance();
cal.setTime(time);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY,hour);
cal.set(Calendar.MINUTE,min);
return cal.getTime();
}
Date today = new Date();
SimpleDateFormat isoTime = new SimpleDateFormat("HH:mm",Locale.US);
String startTimeString = "09:00";
String endTimeString = "12:00";
Date startTime = new Date();
Date endTime = new Date();
try {
startTime = isoTime.parse(startTimeString);
endTime = isoTime.parse(endTimeString);
} catch (ParseException e){
Log.e(TAG,e.getMessage());
}
Date startDate = combineDates(today,startTime);
Date endDate = combineDates(today,endTime);
从那时起,剩下要做的就是获取第二个选定的时间段并将其与限制时间进行比较。
类似的东西:
if (newDateStart.after(startDate) && newDateEnd.before(endDate)) {
// Allow user to choose time
} else {
// Do not allow user to choose time
}
我确定这有点令人费解,但这是我目前拥有的最好的。另外请注意,您可以使用较新的Java对象,但这将适用于大多数Android API,因此...
,
java.time中的LocalTime
LocalTime blockStart = LocalTime.of(9,0);
LocalTime blockEnd = LocalTime.of(12,0);
assert blockEnd.isAfter(blockStart);
LocalTime newBlockStart = LocalTime.of(11,0);
LocalTime newBlockEnd = LocalTime.of(13,0);
assert newBlockEnd.isAfter(newBlockStart);
if (newBlockStart.isBefore(blockEnd) && newBlockEnd.isAfter(blockStart)) {
System.out.println("" + newBlockStart + '–' + newBlockEnd
+ " overlaps with " + blockStart + '–' + blockEnd);
}
摘要的输出是:
11:00–13:00与09:00–12:00重叠
LocalTime
是一天中没有日期的时间。潜在的责任是不能考虑时钟是向前还是向后旋转,例如夏令时(DST)开始或结束。但是,如果您不想要任何花哨的东西,那么它是使用的正确类。
用于检测重叠的公式是标准的。我在下面提供了一个有关该问题的链接。
我想使用Date
类…
不要,不要,请不要。 Date
的设计欠佳,而且已经过时。您最好不要学习如何使用该类。学习使用java.time,现代的Java日期和时间API。一个可能的起点是下面的第一个链接。
链接
本文链接:https://www.f2er.com/3141180.html