不比较上午 10 点之前的时间

Doesn't compare time before 10 am

我正在循环进行时间比较。所以它会检查我所有以 HH:mm 格式保存的时间,然后它会执行其他指令。
如果我尝试比较 00:0009:59 之间的时间,它会给我错误。 我能做什么?

for(int contatore = 0; lista_allarmi.moveToNext() ; contatore++) {
    Date ORANOTIFICA;
    ID_M = lista_allarmi.getInt(0);
    NOME_M = lista_allarmi.getString(1);
    TIPO_M = lista_allarmi.getString(2);
    String ora_notifica = lista_allarmi.getString(3);
    parts = ora_notifica.split(":");
    hrs = Integer.parseInt(parts[0]); // ore
    min = Integer.parseInt(parts[1]); // minuti
    ora_allm.set(Calendar.HOUR_OF_DAY,hrs);
    ora_allm.set(Calendar.MINUTE, min);
    ora_allm.set(Calendar.SECOND, 0);
    ora_allm_piut = ora_allm;
    ora_allm_piut.add(Calendar.MINUTE, 5);
    hrs = ora_allm_piut.get(Calendar.HOUR_OF_DAY);
    min = ora_allm_piut.get(Calendar.MINUTE);
    HPT = String.valueOf(hrs);
    MPT = String.valueOf(min);
    ORARNPT = HPT + ":" + MPT; ORANOTIFICAPIUTIMER;
    Date ora_attuale = Calendar.getInstance().getTime();
    Date ORARIOATT;

    i = new Intent(getContext(), AlarmReceiver.class);
    i.putExtra("id", ID_M);
    i.putExtra("NMM", NOME_M);
    i.putExtra("TPM", TIPO_M);
    pi = PendingIntent.getBroadcast(getContext(), contatore, i, PendingIntent.FLAG_UPDATE_CURRENT);
    if(LocalTime.now().isAfter(parse(ora_notifica)) && LocalTime.now().isBefore(parse(ORARNPT))) {
         //A
    } else {
         //B
    }
}

tl;博士

LocalTime.parse(
    "9:25" ,
    DateTimeFormatter.ofPattern( "H:m" )
)
.isBefore(
    LocalTime.of( 10 , 0 ) 
)

你用错了类

永远不要使用与 Java 的最早版本捆绑在一起的非常麻烦的旧日期时间 类。这些现在是遗留的,完全被 java.time 类 内置于 Java 8 及更高版本中。完全避免 DateCalendarSimpleDateFormat

格式必须与输入匹配

HH:mm format

java.time.format.DateTimeParseException: Text '9:25' could not be parsed at index 0

您的格式显示 HH 表示两位数的值。对于 1-9 小时,需要前导填充零。您输入的 9:25 缺少填充零。

对于此类输入,请使用单个 H。并且可能分钟缺少填充零,因此也使用单个 m

DateTimeFormatter.ofPattern( "H:m" )

不要那么辛苦

java.time 类 将为您解析字符串输入。无需自己分析文字。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "H:m" ) ;
LocalTime lt = LocalTime.parse( "9:25" , f ) ;

半开

compare a time that's between 00:00 and 09:59,

定义时间跨度时,半开方法通常是最好的。在这种方法中,开头被认为是包含,而结尾是不包含。这意味着上午 9 点从 09:00 开始,一直持续到但不包括下一小时的第一个时刻 10:00。

Half-Open 的一个好处是您可以避免试图确定一小时内可分割的最后时刻。是最后时刻09:59? 09:59.9? 09:59.999999999?通过询问“ 上午 10 点之前的时刻来避免整个崩溃?“。

仅针对一天中的时间,没有日期的上下文,时钟在午夜停止。所以如果你想问一天中的某个时间是否在午夜和上午 10 点之间,你只需要问是否在上午 10 点之前。

LocalTime stop = LocalTime.of( 10 , 0 );
LocalTime x = LocalTime.parse( "09:25" ) ;
Boolean isEarlyEnough = x.isBefore( stop ) ;

也许您想使用一天中第一时刻以外的开始时间。在这种情况下,指定开始和结束。

LocalTime start = LocalTime.MIN ;  // Constant for 00:00:00.000000000.
LocalTime stop = LocalTime.of( 10 , 0 );
LocalTime x = LocalTime.parse( "09:25" ) ;
Boolean isEarlyEnoughButNotTooEarly = ( ! x.isBefore( start ) ) &&  x.isBefore( stop ) ;  // "Not before" is a briefer way of saying "Is equal to or later than".

关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

Joda-Time project, now in maintenance mode, advises migration to the java.time 类.

要了解更多信息,请参阅 Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310

您可以直接与数据库交换 java.time 对象。使用 JDBC driver compliant with JDBC 4.2 或更高版本。不需要字符串,不需要 java.sql.* 类.

在哪里获取java.time类?

ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.

当 Calendar.HOUR_OF_DAY 花费的时间 <=9 时,我忘了添加“0”:

hrs=ora_allm_piut.get(Calendar.HOUR_OF_DAY);
min=ora_allm_piut.get(Calendar.MINUTE);
if(hrs<=9){HPT=String.valueOf("0"+hrs);

现在时间尊重时间格式,我可以进行比较