gpt4 book ai didi

java - 如何检查给定时间是否在指定时间范围内

转载 作者:行者123 更新时间:2023-12-01 17:41:59 25 4
gpt4 key购买 nike

我想检查我的日期值是否来自 -

Date d = convertCurrentTimeToSpecificTimeZone("America/Chicago", 2, 30);

时间范围为上午 10 点至下午 6 点。

我在 StackOverflow 上发现了一些类似的链接 similar question并使用了该线程中的一些代码。

我想检查任何时区的当前时间是否在上午 10 点到下午 6 点的范围内。如果是,则打印"is",否则打印“否”。

目前以下代码:

    String string1 = "10:11:13";
Date time1 = new SimpleDateFormat("HH:mm:ss").parse(string1);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
calendar1.add(Calendar.DATE, 1);
System.out.println(calendar1.getTime().toString());

它只打印 1970 年上午 10:11 的时间。像这样 - 1970 年 1 月 2 日星期五 10:11:13 IST 。

但我想检查今天或任何 future 的日期时间是否在上午 10 点到下午 6 点的范围内。

下面是代码引用:

public static Date convertCurrentTimeToSpecificTimeZone(String timeZone, int increaseDateBy,
int increaseMinutesBy) {
Calendar calendar = Calendar.getInstance();
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone(timeZone);
calendar.setTimeZone(fromTimeZone);
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1);
}
calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}
increaseCalenderDateBy(calendar, increaseDateBy);
increaseCalenderMinuteBy(calendar, increaseMinutesBy);
return calendar.getTime();
}

public static void getTimeBetweenRange() throws ParseException {
String string1 = "10:11:13";
Date time1 = new SimpleDateFormat("HH:mm:ss").parse(string1);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
calendar1.add(Calendar.DATE, 1);
System.out.println(calendar1.getTime().toString());

String string2 = "18:49:00";
Date time2 = new SimpleDateFormat("HH:mm:ss").parse(string2);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
calendar2.add(Calendar.DATE, 1);
System.out.println(calendar2.getTime().toString());

Date d = convertCurrentTimeToSpecificTimeZone("America/Chicago", 2, 30);
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(d);
System.out.println(calendar3.getTime().toString());

Date x = calendar3.getTime();
if (x.after(calendar1.getTime()) && x.before(calendar2.getTime())) {
// checkes whether the current time is between 14:49:00 and 20:11:13.
System.out.println(true);
} else
System.out.println(false);
}

所以我的以下代码的输出是:

Fri Jan 02 10:11:13 IST 1970
Fri Jan 02 18:49:00 IST 1970
Fri Jan 31 03:15:07 IST 2020

最佳答案

不是很清楚。对于这个答案,我假设您的所有时间都应以美国/芝加哥时区来理解。如果这不是您想要的,请恢复。

java.time

    ZoneId zone = ZoneId.of("America/Chicago");

ZonedDateTime zdt = ZonedDateTime.now(zone).plusDays(2).plusMinutes(30);

LocalTime rangeStart = LocalTime.parse("10:11:13");
LocalTime rangeEnd = LocalTime.parse("18:49:00");

LocalTime time = zdt.toLocalTime();
if (!time.isBefore(rangeStart) && time.isBefore(rangeEnd)) {
System.out.println("Yes");
} else {
System.out.println("No");
}

当我刚才(芝加哥时间 11:30)运行此代码片段时,输出为:

Yes

我正在使用 java.time,这是现代 Java 日期和时间 API,并建议您也这样做。它比旧的、过时的、设计糟糕的类 DateSimpleDateFormatCalendarTimeZone 使用起来要好得多。 >.

LocalTime 是一天中从 00:00(含)到 24:00(不含)的时间。通过比较 LocalTime 对象,我们忽略了日期,并且对于 1970 年或历史上其他时间的不相关日期没有任何问题。

编辑:

Also is it possible to get the date and time of rangeStart and rangeEnd in order to verify for which particular day and time we are checking the conditions?

不,那没有意义。由于 LocalTime 是一天中的某个时间,没有日期,因此无法从中获取日期。但您可以打印 ZonedDateTime 并验证其日期部分。为了确保代码是正确的,请编写一些单元测试。

链接: Oracle tutorial: Date Time解释如何使用 java.time。

关于java - 如何检查给定时间是否在指定时间范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59963851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com