选择12:00

时间:2018-04-26 12:21:47

标签: java datetime simpledateformat

我正在创建一个预订系统,我不想让用户在开始时间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 ..

3 个答案:

答案 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是未经检查的例外。

如果startTimeendTimeJComboBox,我相信您甚至可以将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);

Combo

未折叠:

Combobox unfolded

我正在使用来自LocalTime的{​​{1}},即现代Java日期和时间API。与java.timejava.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");
    }

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

相关问题