我在问题上发现的最近的帖子是How to compare current time with time range?,但这对我不起作用,因为我需要知道用户设备上的当前时间是否在某个时间范围内
所以我得到了这样的当前时间...
DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss a");
String horaString = dateFormat.format(hour);
Log.i("ALO","HORAAAAAASSSSTRRRRIIIINNNNGGG---->"+horaString);
first = horaString.charAt(11);
Log.i("ALOP","Char at 11 ---->"+first);
char second=horaString.charAt(12);
Log.i("ALOP","Char at 12 ---->"+second);
char third=horaString.charAt(13);
char fourth=horaString.charAt(14);
char fith=horaString.charAt(15);
StringBuilder sb = new StringBuilder();
sb.append(first);
sb.append(second);
sb.append(third);
sb.append(fourth);
sb.append(fith);
String currentTime = sb.toString();
现在需要做的是
6:00>=currentTime<=8:30 //Can i still do the comparison with AM/PM?
因此,如果currentTime = 8:29,这是我需要做的,那么让我知道布尔值为True的方法。
答案 0 :(得分:1)
final LocalTime rangeBegin = LocalTime.of(6, 0);
final LocalTime rangeEnd = LocalTime.of(8, 30);
LocalTime currentTime = LocalTime.now(ZoneId.of("America/Bogota"));
boolean inClosedRange = ! (currentTime.isBefore(rangeBegin) || currentTime.isAfter(rangeEnd));
如果您更喜欢设备时区设置,而不是硬编码(或配置)时区,请使用LocalTime.now(ZoneId.systemDefault())
。
由于LocalTime
既没有isBeforeOrEqual
方法也没有isEqualOrAfter
,因此我否定了这个条件:如果当前时间既不是严格地在范围之前也不是在范围之后,则它是必须在其中。有些人会喜欢更长但也更直接的方法:
boolean inClosedRange = currentTime.equals(rangeBegin)
|| (currentTime.isAfter(rangeBegin) && currentTime.isBefore(rangeEnd))
|| currentTime.equals(rangeEnd);
您会注意到,与使用SimpleDateFormat
和Date
的代码相比,它仍然简单得多。我个人也觉得更清晰。我正在使用并推荐使用Java.time(现代Java日期和时间API)。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 1 :(得分:0)
有两个有用的命令:After,Before。 这是一个如何使用它们的示例:
SimpleDateFormat dateFormat = new SimpleDateFormat(“ HH:mm”);
Date fromTime = dateFormat.parse("6:00");
Date toTime = dateFormat.parse("8:30");
Date currentTime = dateFormat.parse(dateFormat.format(new Date()));
if(currentTime.after(fromTime) && currentTime.before(toTime)) {
// To do
}