【问题标题】:How do I parse a date string into a Joda DateTime object for java? [duplicate]如何将日期字符串解析为 Java 的 Joda DateTime 对象? [复制]
【发布时间】:2015-09-27 16:50:52
【问题描述】:

下面的代码是迄今为止我想出的最好的。 .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());
    }

【问题讨论】:

  • NPE 警报! :) 使用 Calendar.getInstance() 初始化您的日历。
  • @rdm 很高兴看到您想参与 StackOverflow。发帖前请先搜索。本网站旨在成为权威问答库,而不是开放式讨论组。
  • 您在标题中说您需要“将日期字符串解析为 Joda DateTime”,但在两个答案的 cmets 中您都说您“需要一个日历对象”。当甚至不知道自己想要什么时,我们无能为力。
  • @Andreas 你是对的。我会改正的。我有点新手所以有点学习曲线。

标签: java jodatime


【解决方案1】:

您已经创建了您需要的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 方式。

【讨论】:

  • 我需要的最终结果是另一个方法的日历对象
  • 你的第一行也给我带来了错误,建议将 DateTimeFormat 更改为 DateTimeFormatter。这是为什么呢?
  • 因为您实际上没有安装 Joda?
【解决方案2】:

如果您修复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 被抛出的确切行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2020-05-23
    • 2011-09-09
    • 1970-01-01
    • 2020-07-08
    相关资源
    最近更新 更多