将文本解析为日历日期的错误

时间:2017-05-17 20:18:02

标签: java calendar

我已经阅读了很多过去的帖子,看起来我正在做的一切正确,但是由于某种原因,日历正在解析字符串错误。基本上我是在输入日期并将其解析为日历日期。 println语句是为了进行错误测试。

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-YYYY");
Calendar wholeDate = new GregorianCalendar();

System.out.println(txtMmddyyyy.getText());
System.out.println(wholeDate.MONTH + " " + wholeDate.DAY_OF_MONTH + " " + wholeDate.YEAR);

try {
    wholeDate.setTime(sdf.parse(txtMmddyyyy.getText()));
} catch (ParseException e3) {
    System.out.println("Failure");
    e3.printStackTrace();
}

System.out.println(wholeDate.MONTH + " " + wholeDate.DAY_OF_MONTH + " " + wholeDate.YEAR);

当我输入“05-15-2017”

- 第一个print语句返回“05-15-17”

- 第二个打印语句返回“2 5 1”

- 第三个打印语句返回“2 5 1”

我很困惑,我想知道是否有人知道可能会发生什么。感谢。

2 个答案:

答案 0 :(得分:2)

MONTHDAY_OF_MONTHYEAR是常量,它们不反映Calendar的状态,但为您提供了与其互动的方法。我强烈建议您花点时间阅读JavaDocs以更好地了解这些字段的用途以及如何使用它们。

但是,鉴于Calendar被有效弃用,我强烈建议您花时间,而不是投资学习更新的日期/时间类 - 有关详情,请参阅Date and Time Classes < / p>

答案 1 :(得分:0)

由于日历月份从0开始,您将获得上个月

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
Calendar wholeDate = new GregorianCalendar();

System.out.println(txtMmddyyyy.getText());
System.out.println(wholeDate.get(Calendar.MONTH) + " " + wholeDate.get(Calendar.DAY_OF_MONTH) + " " + wholeDate.get(Calendar.YEAR));

try {
    wholeDate.setTime(sdf.parse(txtMmddyyyy.getText()));
} catch (ParseException e3) {
    System.out.println("Failure");
    e3.printStackTrace();
}

System.out.println(wholeDate.get(Calendar.MONTH) + " " + wholeDate.get(Calendar.DAY_OF_MONTH) + " " + wholeDate.get(Calendar.YEAR));