如何将日期字符串解析为Java的Joda DateTime对象?

时间:2015-09-27 16:50:52

标签: java jodatime

以下代码是我迄今为止提出的最佳代码。 .setTime()方法抛出异常。有没有更好的方法来做到这一点或纠正这个?

    String format = "MM/dd/yyyy";

    DateTime test = new DateTime();
    DateTimeFormatter dateFormat  = DateTimeFormatter.ofPattern("MM/dd/yyyy");

    SimpleDateFormat formater = new SimpleDateFormat(format);

    String startDateString = "09/10/2015";
    String endDateString = "09/20/2015";
    Date startDate = null;
    Date endDate = null;
    Calendar sampleDateStart = null;
    Calendar sampleDateEnd = null;

    try{
        startDate = formater.parse(startDateString);
        endDate = formater.parse(endDateString);
        sampleDateStart.setTime(startDate);
        sampleDateEnd.setTime(endDate);
    }catch(Exception e){
        System.out.println(e.getMessage());
    }

2 个答案:

答案 0 :(得分:0)

如果你修复了Calendar变量的初始化,似乎很好:

Calendar sampleDateStart = Calendar.getInstance();
Calendar sampleDateEnd = Calendar.getInstance();

如果您按照建议使用了正确的异常类型,问题会更加明显, 而不是通用Exception, 并打印堆栈跟踪而不是e.getMessage()

try {
    startDate = formater.parse(startDateString);
    endDate = formater.parse(endDateString);
    sampleDateStart.setTime(startDate);
    sampleDateEnd.setTime(endDate);
} catch (ParseException e) {
    e.printStackTrace();
}

堆栈跟踪会告诉你投掷NullPointerException的确切行。

答案 1 :(得分:0)

您已经创建了所需的DateTimeFormatter,所以只需使用它:

DateTimeFormatter formater = DateTimeFormat.forPattern("MM/dd/yyyy");
DateTime startDateTime = formater.parseDateTime("09/10/2015");
DateTime endDateTime = formater.parseDateTime("09/20/2015");

无需SimpleDateFormatCalendar

注意:我已将DateTimeFormatter的创建修复为Joda,因为您使用的是Java 8方式。