选择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仅包含有效的时间字符串,则可以省略try
– catch
构造,因为DateTimeParseException
是未经检查的exception。
如果startTime
和endTime
是JComboBox
,我相信你甚至可以将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);
展开:
我在java.time
使用java.time
,它是现代Java日期和时间API。 java.time
通常比旧的和过时的日期和时间类(如SimpleDateFormat
, Date
等)更好。
链接: 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"); }
将我的代码更改为此修复此问题..