【发布时间】:2020-01-29 09:17:19
【问题描述】:
我想检查我的日期值是否来自 -
Date d = convertCurrentTimeToSpecificTimeZone("America/Chicago", 2, 30);
在上午 10 点到下午 6 点之间。
我在 StackOverflow similar question 上找到了一些类似的链接,并使用了该线程中的一些代码。
我只想检查任何时区的当前时间是否在上午 10 点到下午 6 点之间。如果是,打印“是”,否则打印“否”。
目前为以下代码:
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 时间。像这样 - Fri Jan 02 10:11:13 IST 1970。
但我想检查今天或任何未来的日期时间是否在上午 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
【问题讨论】:
-
我建议你不要使用
Date、SimpleDateFormat、Calendar和TimeZone中的任何一个类。它们都设计得很糟糕,而且已经过时了。而是使用ZonedDateTime、ZoneId` 和DateTimeFormatter,均来自java.time, the modern Java date and time API。 -
不清楚,抱歉。
10:11:13(开始和结束时间)应该在美国/芝加哥时区理解吗?还是您或用户自己的时区?还是……? -
@Ole V.V. - 是的,10:11:13(开始和结束时间)以美国/芝加哥时区为准。
标签: java date time calendar range