我正在创建一个预订系统,我不想让用户在开始时间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(良好输出),
如果我选择开始时间09:00和结束时间12:00程序将输出fail2(应该是test1),
如果我选择开始时间12:00和结束时间10:00,程序将输出test1(应该是fail2),
如果我选择开始时间12:00和结束时间15:00,程序将输出test1(良好输出)
这种类型的问题只发生在我选择12:00 ..
答案 0 :(得分:7)
您应该使用HH:mm
。
hh
范围01-12
,而HH
范围1-23
。
检查SimpleDateFormat
的{{3}}:
H:白天的小时(0-23)
h:上午/下午(1-12)小时
答案 1 :(得分:4)
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
解析您的字符串而无需显式格式化程序。此外,如果您确信您的组合框仅包含有效的时间字符串,则可以省略try
- catch
结构,因为DateTimeParseException
是未经检查的例外。
如果startTime
和endTime
为JComboBox
,我相信您甚至可以将LocalTime
个对象填入其中。然后,当用户从每个用户中选择一个时,您不需要解析。您的JComboBox
会调用LocalTime.toString()
,这会返回09:00
这样的字符串,然后会显示组合框并让用户选择。
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<LocalTime> combo = new JComboBox<>(times);
未折叠:
我正在使用来自LocalTime
的{{1}},即现代Java日期和时间API。与java.time
,java.time
等更旧的过时日期和时间类相比,SimpleDateFormat
通常更适合使用。
链接: Oracle tutorial: Date Time解释如何使用Date
。
答案 2 :(得分:0)
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");
}
将我的代码更改为此修复此问题..