【发布时间】:2018-04-26 12:21:46
【问题描述】:
我正在创建一个预订系统,我不想让用户预订开始时间 11:00 和结束时间 09:00(过去)(我使用 24 小时制)。 我有两个组合框,其中填充了充当开始和结束时间的字符串 (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(good output),
如果我选择开始时间 09:00 和结束时间 12:00,程序将输出 fail2(应该是 test1),
如果我选择开始时间 12:00 和结束时间 10:00,程序将输出 test1(应该是 fail2),
如果我选择开始时间 12:00 和结束时间 15:00,程序将输出 test1(输出良好)
这种问题只有在我选择12:00时才会出现..
【问题讨论】:
-
我认为您的格式需要为
HH:mm,因为hh指的是12 小时制docs.oracle.com/javase/tutorial/i18n/format/… -
考虑在您的时代使用
LocalTime time = LocalTime.parse(start);。 -
我建议你避免使用
SimpleDateFormat类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。加分项:正如@notyou 所说,您不需要显式格式化程序。即使您确实使用了DateTimeFormatter,它也会通过异常通知您您使用了不正确的格式模式。 -
谢谢你们的提示,我必须检查一下这个 LocalTime。
-
@OleV.V.赞成,但我的意思是你显然链接的旧问题.... TT_TT
标签: java datetime simpledateformat