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