您如何比较Java时间?

我想知道如何比较Java程序中的时间。例如:如果我从09:00-12:00选择一个时间段并进行设置。如果我选择第二次并选择11:00-13:00时间段,我希望能够弹出一个错误,但是我不确定如何设置该错误。

例如,如果您要在9-12的按摩治疗时间预订时间,则无法在11-1为自己保留另一个按摩时间,这是没有意义的。我试图弄清楚如何将其放入代码中。我的菜鸟级别是让我认为将字符串作为选择方法,然后将字符串解析为整数并比较整数是否重叠?我想使用Date类,因为它看起来非常有用,并且我想学习如何使用它。

wuwuwuwuwuwuuu 回答:您如何比较Java时间?

假设您有限制时间,无论出于何种原因,您都必须在其中限制时间。让我们将这些限制时间转换为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

大家都在问