小时在一个小时范围内吗?

时间:2019-06-02 14:44:58

标签: android date

我在问题上发现的最近的帖子是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的方法。

2 个答案:

答案 0 :(得分:1)

java.time和ThreeTenABP

    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);

您会注意到,与使用SimpleDateFormatDate的代码相比,它仍然简单得多。我个人也觉得更清晰。我正在使用并推荐使用Java.time(现代Java日期和时间API)。

问题:我可以在Android上使用java.time吗?

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接

答案 1 :(得分:0)

有两个有用的命令:AfterBefore。 这是一个如何使用它们的示例:

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
}