代码之家  ›  专栏  ›  技术社区  ›  DRT

Java,比较if语句中的分钟-没有得到期望的结果

  •  0
  • DRT  · 技术社区  · 7 年前

    也许这只是我目前的心态/沮丧,但我的谷歌搜索和stackoverflow结果并没有帮助我。

    我想验证时间输入的分钟部分等于00或30。

    我仍然对Java和编程有一个大致的处理,所以有时我不知道正确的术语来开始搜索,所以我道歉如果这被问和回答。

    任何答案都应该介于初级和中级之间——如果我不明白,我会在回答之前自己想清楚。

    这是我最近一次尝试的片段:

    else if(timePart.getMinute() != 0 || 
            timePart.getMinute() != 30 ||
            appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 0 ||
            appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 30)
    {
        System.out.println(timePart.getMinute());
        System.out.println(appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute());
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("Correct the minutes");
        alert.setHeaderText(null);
        alert.setContentText("You are only allowed to enter the start and end time minutes on the hour or half hour (ie :00 or :30).");
        alert.showAndWait();
    }
    

    我包括了这个系统,只是为了测试不同的结果是什么——例如,上午9:00和上午9:30都会打印0。

    不知道我做错了什么,但即使输入了有效时间,我的警报也总是弹出。

    4 回复  |  直到 7 年前
        1
  •  3
  •   namokarm tiktok    7 年前

    你的情况总是正确的。

        if (timePart.getMinute() != 0 || 
            timePart.getMinute() != 30 || 
            appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 0 ||
            appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 30 )
    

    它总是弹出,因为分钟总是不同的然后0或不同的然后30。

    例如,当timepart.getMinute()为0时,则与30不同,反之亦然。 只有在下列情况下才应显示弹出窗口:

      if ((timePart.getMinute() == 0 || timePart.getMinute() == 30 || ...) == false)
    

    或更短

     if (!(timePart.getMinute() == 0 || timePart.getMinute() == 30 ||...))
    

    或将您的或更改为和:

     if (timePart.getMinute() != 0 && timePart.getMinute() != 30 || ...)
    
        2
  •  1
  •   purring pigeon    7 年前

    更改为和比较-不是或:

    else if(timePart.getMinute() != 0 && timePart.getMinute() != 30 &&
                        appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 0 &&
                        appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 30
                        )
                {
                    System.out.println(timePart.getMinute());
                    System.out.println(appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute());
                    Alert alert = new Alert(Alert.AlertType.INFORMATION);
                    alert.setTitle("Correct the minutes");
                    alert.setHeaderText(null);
                    alert.setContentText("You are only allowed to enter the start and end time minutes on the hour or half hour (ie :00 or :30).");
                    alert.showAndWait();
                }
    
        3
  •  1
  •   fabian    7 年前

    如果分钟可以被 30 你可以用 % 操作员。这样可以避免检查这两个值的分钟数 0 三十 :

    else if(timePart.getMinute() % 30 != 0
            || appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.systemDefault()).getMinute() % 30 != 0) {
        ...
    }
    
        4
  •  0
  •   Wayne    7 年前

    我认为情况是:

    else if((timePart.getMinute() != 0 && timePart.getMinute() != 30) ||
                        (appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 0 &&
                        appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 30)
                        )