Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较Java中的时间?_Java_Date_Time - Fatal编程技术网

如何比较Java中的时间?

如何比较Java中的时间?,java,date,time,Java,Date,Time,我想知道如何在Java程序中比较时间。例如:如果我从09:00-12:00选择一个时间段并将其设置为。如果我选择第二次并选择11:00-13:00时间段,我希望能够弹出一个错误,但我不确定如何设置 例如,如果你从9月12日到12月12日在一个按摩治疗场所预订了一个时间,那么你不能在11月1日再为自己预订一个时间,这是没有意义的。我正在想办法把它写成代码。我的noob级别让我考虑使用字符串作为选择方法,然后将字符串解析为整数,并比较整数是否重叠?不过我想使用Date类,因为它看起来非常有用,我想学

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


例如,如果你从9月12日到12月12日在一个按摩治疗场所预订了一个时间,那么你不能在11月1日再为自己预订一个时间,这是没有意义的。我正在想办法把它写成代码。我的noob级别让我考虑使用字符串作为选择方法,然后将字符串解析为整数,并比较整数是否重叠?不过我想使用
Date
类,因为它看起来非常有用,我想学习如何使用它。

假设您有限制时间,无论出于何种原因,您必须创建一个时间块。让我们将这些限制时间转换为Java中的实际日期对象。我正在使用

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中的实际日期对象。我正在使用

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,因此…

LocalTime from Java.time 代码段的输出为:

11:00–13:00与09:00–12:00重叠

LocalTime
是一天中没有日期的时间。一个潜在的问题是,它不能考虑时钟是否向前或向后转动,例如夏季时间(DST)开始或结束时。但是,如果您不需要那么花哨的东西,那么它就是正确的类

检测重叠的公式是标准的。我在下面提供了一个关于它的问题的链接

但是我想使用
日期

不要,不要,请不要。
日期
设计拙劣,过时已久。如果你不去学习如何使用那门课,你的境况会好得多。学习使用java.time,现代java日期和时间API。可以从下面的第一个链接开始

链接
  • 解释如何使用java.time
  • (在C#中,但使用的公式相同)
java.time中的LocalTime 代码段的输出为:

11:00–13:00与09:00–12:00重叠

LocalTime
是一天中没有日期的时间。一个潜在的问题是,它不能考虑时钟是否向前或向后转动,例如夏季时间(DST)开始或结束时。但是,如果您不需要那么花哨的东西,那么它就是正确的类

检测重叠的公式是标准的。我在下面提供了一个关于它的问题的链接

但是我想使用
日期

不要,不要,请不要。
日期
设计拙劣,过时已久。如果你不去学习如何使用那门课,你的境况会好得多。学习使用java.time,现代java日期和时间API。可以从下面的第一个链接开始

链接
  • 解释如何使用java.time
  • (在C#中,但使用的公式相同)

@Paul Rooney我认为如果两个时间间隔重叠,OP希望出错。例如检测会议冲突。您的问题不清楚,能否添加一些输入和输出example@peter.petrov是的,这正是我的意思,我真的不知道怎么用词,因为这是一个奇怪的问题。例如,如果你从9月12日到12月12日在按摩治疗场所预约时间,你不能在11月1日为自己再预约一次,这是没有意义的。我正在想办法把它写成代码。我的noob级别让我考虑使用字符串作为选择方法,然后将字符串解析为整数,并比较整数是否重叠?我想使用Date类,因为它看起来非常有用,我想学习如何使用它。fwiw您最好使用java.time类而不是Date。感谢您提供更多信息和一个非常解释性的示例。这样做时,请始终编辑问题并在那里添加信息,以便我们将所有内容都放在一个位置,这样会更好。读者通常不会通过评论来理解你的问题。@PaulRooney我认为如果两个时间间隔重叠,OP会出错。例如检测会议冲突。您的问题不清楚,能否添加一些输入和输出example@peter.petrov是的,这正是我的意思,我真的不知道怎么用词,因为这是一个奇怪的问题。例如,如果你从9月12日到12月12日在按摩治疗场所预约时间,你不能在11月1日为自己再预约一次,这是没有意义的。我正在想办法把它写成代码。我的noob级别让我考虑使用字符串作为选择方法,然后将字符串解析为整数,并比较整数是否重叠?我想使用Date类,因为它看起来非常有用,我想学习如何使用Date类