如果时间在两个值之间,我可以显示警报。
例如:
开始= 07:00:00
end = 17:00:00
assert start != null;
int from = Integer.valueOf(start.replace(":", ""));
assert end != null;
int to = Integer.valueOf(end.replace(":", ""));
Date date = new Date();
Calendar c = Calendar.getInstance();
c.setTime(date);
int t = c.get(Calendar.HOUR_OF_DAY) * 100 + c.get(Calendar.MINUTE);
boolean isBetween = to > from && t >= from && t <= to || to < from && (t >= from || t <= to);
a = isBetween ? 1 : 0;
if(a == 1) {
alert_f();
// a is never 1...
}
问题是a
永远不会为1,即使实际时间在开始和结束之间。
为什么有什么主意?
答案 0 :(得分:2)
String start = "07:00:00";
String end = "17:00:00";
LocalTime startTime = LocalTime.parse(start);
LocalTime endTime = LocalTime.parse(end);
LocalTime now = LocalTime.now(ZoneId.of("Europe/Rome"));
boolean isBetween = ! now.isBefore(startTime) && now.isBefore(endTime);
int a = isBetween ? 1 : 0;
System.out.println("Is between? " + isBetween + "; a = " + a);
当我刚运行它时(罗马17:15),我得到了像您一样的0。如果我指定的时间不是下午5点,则会得到:
在之间?真正; a = 1
因此,您需要为代码选择正确的时区。如果您信任设备时区,则可以使用ZoneId.systemDefault()
。
在我的布尔表达式中,我使用的“不早于”表示“等于或等于”。
我正在利用您的时间字符串采用ISO 8601格式的事实,LocalTime
和其他java.time类将其解析(并打印)为默认格式。因此,我们无需显式格式化程序即可进行解析。
您尝试使用的日期时间类Date
和Calendar
早已过时且设计欠佳。同样,整数值70 000和170 000对于开始时间和结束时间的表示没有任何意义。取而代之的是,我使用Java.time(现代Java日期和时间API)中的LocalTime
。这是一天中没有日期且没有UTC偏移量的时间,因此似乎正是您所需要的。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 1 :(得分:1)
好吧,您可以使用SimpleDateFormat并获取时间,然后将其简化为:
assert start != null;
int from = Integer.valueOf(start.replace(":", ""));
assert end != null;
int to = Integer.valueOf(end.replace(":", ""));
// here the change
int currentTime = Integer.valueOf(new SimpleDateFormat("HH:mm:ss").format(new Date()).replace(":", ""));
boolean isBetween = to > from && currentTime >= from && currentTime <= to || to < from && (currentTime >= from || currentTime <= to);
// end
int a = isBetween ? 1 : 0;
答案 2 :(得分:1)
您可以尝试这种方式
try {
SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date from = parser.parse("2019-12-31 07:00");
Date to = parser.parse("2019-12-21 17:00");
int a;
Date userDate = parser.parse(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()));
if (userDate.after(from) && userDate.before(to))
a = 1;
else
a = 0;
} catch (ParseException e) {
// Invalid date was entered
}