选择12:00时比较时间不正确

我正在创建一个预订系统,我不想让用户在开始时间11:00和结束时间09:00(过去)预订(我正在使用24小时制)。 我有两个充满字符串的combobox,作为开始和结束时间(09:00,10:00,11:00,12:00,13:00 ……)

我有这个代码:

String start = (String) startTime.getSelectedItem(); String end = (String) endTime.getSelectedItem(); try { if(new SimpleDateFormat("hh:mm").parse(start).before(new SimpleDateFormat("hh:mm").parse(end))){ System.out.println("test1");// future date - good }else{ System.out.println("fail2");// old date - bad } } catch (ParseException ex) { System.out.println("error"); } 

除非我选择开始/结束时间为12:00,否则此操作非常有效。 程序输出与它应该输出的相反,我不确定为什么。

如果我选择开始时间14:00和结束时间12:00,程序将输出fail2(良好输出),

如果我选择开始时间09:00和结束时间12:00程序将输出fail2(应该是test1),

如果我选择开始时间12:00和结束时间10:00,程序将输出test1(应该是fail2),

如果我选择开始时间12:00和结束时间15:00,程序将输出test1(良好输出)

这种类型的问题只发生在我选择12:00时。

 public static void checkTimes(String start, String end) { try { if (LocalTime.parse(start).isBefore(LocalTime.parse(end))) { System.out.println("test1");// future date - good } else { System.out.println("fail2");// old date - bad } } catch (DateTimeParseException dtpe) { System.out.println("error"); } } 

我们来试试吧:

  checkTimes("14:00", "12:00"); checkTimes("09:00", "12:00"); checkTimes("12:00", "10:00"); checkTimes("12:00", "15:00"); 

这打印:

 fail2 test1 fail2 test1 

我相信这与你的意图一致。 请注意, LocalTime分析您的字符串,而无需显式格式化程序。 此外,如果您相信combobox仅包含有效的时间字符串,则可以省略trycatch构造,因为DateTimeParseException是未经检查的exception。

如果startTimeendTimeJComboBox ,我相信你甚至可以将LocalTime对象填充到它们中。 然后,当用户从每个用户中选择一个时,您不需要解析。 你的JComboBox将调用LocalTime.toString() ,它将返回一个像09:00这样的字符串,然后combobox将显示并让用户选择。

  LocalTime[] times = { LocalTime.of(9, 0), LocalTime.of(10, 0), LocalTime.of(11, 0), LocalTime.of(12, 0), LocalTime.of(13, 0), LocalTime.of(14, 0) }; JComboBox combo = new JComboBox<>(times); 

二合一

展开:

Combobox展开了

我在java.time使用java.time ,它是现代Java日期和时间API。 java.time通常比旧的和过时的日期和时间类(如SimpleDateFormatDate等)更好。

链接: Oracle教程:Date Time解释如何使用java.time

你应该使用HH:mm

hh范围是01-12 ,而HH范围是1-23

更新

检查SimpleDateFormat的文档 :

H:一天中的小时(0-23)

h:上午/下午(1-12)小时

 String start = (String) startTime.getSelectedItem(); String end = (String) endTime.getSelectedItem(); SimpleDateFormat timer = new SimpleDateFormat("HH:mm"); try { Date startD = timer.parse(start); Date endD = timer.parse(end); if(startD.before(endD)){ System.out.println("test1");// future date - good }else{ System.out.println("fail2");// old date - bad } } catch (ParseException ex) { System.out.println("error"); } 

将我的代码更改为此修复此问题..