Java格里高利历日历格式

时间:2015-03-16 20:08:47

标签: java date datetime gregorian-calendar

我有一个露营程序,其中有一个对话框,用户输入他们要登记的日期以及他们计划签入文本字段的日期。一旦他们按下对话框上的确定,他们输入的日期应该可以在JTable中查看。目前,在日期列中,当用户按下ok时,我得到一个java.utl.GregorianCalendar [time .... etc]。其他信息,如姓名,入住天数和站点号码似乎没问题。显然它没有正确格式化日期,但我不知道如何解决它。以下是DialogCheckInTent类中的公历的代码:

 public GregorianCalendar getDateIn(){
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
    GregorianCalendar g = new GregorianCalendar();
     try{Date date = df.parse(dateIn.getText()); 
     g.setTime(date);
     }
     catch (ParseException ex) {
            ex.printStackTrace();
        }
    return g;
}

public GregorianCalendar getCheckOutDate(){
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
    GregorianCalendar g = new GregorianCalendar();
     try{Date date = df.parse(checkOutTxt.getText()); 
     g.setTime(date);
     }
     catch (ParseException ex) {
            ex.printStackTrace();
        }
    return g;
}

当用户按下ok时,上述代码在GUI中用于此方法。

 if (pressed == checkInTentItem) {
        newTent.clear();
        newTent.setVisible(true);
        if (model.getRowCount() < 5) {
            if (newTent.isOk()) {
                String nameReserving = newTent.getNameReserve();
                GregorianCalendar checkIn = newTent.getDateIn();
                int daysStaying = newTent.getDaysStaying();
                GregorianCalendar checkOutOn = newTent.getCheckOutDate();
                int siteNumber = newTent.getSiteNumber();
                int tenters = newTent.getTenters();
                Tent tent = new Tent(nameReserving, checkIn, daysStaying,
                        checkOutOn, siteNumber, tenters);
                model.add(tent);
            }

        }
        else {
            JOptionPane.showMessageDialog(frame, "All sites are full.",
                    " ", JOptionPane.INFORMATION_MESSAGE);
        }
    }

所有内容编译都没有问题,但日期无法正常工作。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

DateFormat df = new SimpleDateFormat("mm/dd/yyyy");

格式不正确

个月以M表示,因此请将其更改为MM/dd/yyyy

还不确定以下条件

pressedcheckInTentItem的类型
if (pressed == checkInTentItem) {

答案 1 :(得分:0)

java.time

Answer by Joshi是正确的,应该被接受。

现代解决方案使用LocalDate类。这个类是java.time类的一部分,现在它取代了麻烦的旧日期时间类,例如GregorianCalendarDateSimpleDateFormat

将您的输入解析为LocalDate

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu" , Locale.US ) ;
LocalDate ld = LocalDate.parse( "11/29/2017" ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore