Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不';不要在上午10点之前比较时间_Java_Date_Parsing_Time_Localtime - Fatal编程技术网

Java 不';不要在上午10点之前比较时间

Java 不';不要在上午10点之前比较时间,java,date,parsing,time,localtime,Java,Date,Parsing,Time,Localtime,我在循环中进行时间比较。因此,它会检查以HH:mm格式保存的所有时间,然后执行其他指令。 如果我尝试比较00:00和09:59之间的时间,它会给出错误。 我能做什么 for(int contatore = 0; lista_allarmi.moveToNext() ; contatore++) { Date ORANOTIFICA; ID_M = lista_allarmi.getInt(0); NOME_M = lista_allarmi.getString(1);

我在循环中进行时间比较。因此,它会检查以
HH:mm
格式保存的所有时间,然后执行其他指令。
如果我尝试比较
00:00
09: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;博士 您使用了错误的类 永远不要使用与Java最早版本捆绑在一起的非常麻烦的旧日期时间类。现在这些都是遗留的,完全被java 8和更高版本中内置的java.time类所取代。同时避免使用日期、日历和简化格式

格式必须与输入匹配 HH:mm格式

java.time.format.DateTimeParseException:无法在索引0处分析文本“9:25”

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

对于此类输入,请使用单个
H
。而且可能分钟数没有填充零,因此在那里也使用一个
m

模式的日期时间格式(“H:m”)

不要那么努力工作 time类将为您解析字符串输入。不需要自己分析文本

DateTimeFormatter f = DateTimeFormatter.ofPattern( "H:m" ) ;
LocalTime lt = LocalTime.parse( "9:25" , f ) ;
半开 比较00:00和09:59之间的时间

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

“半开放”的一个好处是,你可以避免在一个小时内的最后一刻试图将其一分为二。最后一刻是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 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
classes

从哪里获得java.time类

  • 然后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(当Calendar.hour\u OF_DAY的小时数为时,我忘了添加一个“0”,你能显示什么
      解析(ora\u notifica)
      是吗?感谢您发布一些代码,但这还不足以让人们快速发现错误,而且您也没有包括您收到的错误。如果是异常,请包括完整的堆栈跟踪。对于代码,请创建一个堆栈跟踪,并将其发布到此处。您是否尝试调试代码?
      lista_Allari.moveToNext()
      for
      循环中似乎是一个非常奇怪的限制。在您的最后一条评论中,您引用了java.time类解析中的一个错误,但我在上面的源代码中没有看到java.time解析。在发布堆栈溢出之前,请更加小心地进行彻底和良好的编写。并花时间编写简短的人工示例代码而不是剪切和粘贴您的实时代码。
      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".
      
      hrs=ora_allm_piut.get(Calendar.HOUR_OF_DAY);
      min=ora_allm_piut.get(Calendar.MINUTE);
      if(hrs<=9){HPT=String.valueOf("0"+hrs);