日期不正确

时间:2013-09-06 15:51:04

标签: java

我想用名字显示月份。所以我正在使用JODA.jar

这是我的代码:

   public static void main(String[] args) {
    String date1 = "2013-21-01 14:00:00";
    String date2 = "2013-01-01 14:00:00";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
    Date date11, date22;
    try {
        date11 = sdf.parse(date1);
        System.out.println("Date : " +date11);
        date22 = sdf.parse(date2);
        System.out.println("Date : " +date22);

    DateTime dt1 = new DateTime(date11);
    String monthName1 = dt1.monthOfYear().getAsText(Locale.ENGLISH); 
    DateTime dt2 = new DateTime(date22);
    String monthName2 = dt2.monthOfYear().getAsText(Locale.ENGLISH); 

    System.out.println("String1 : " +monthName1+" "+dt1.getYear());
    System.out.println("String2 : " +monthName2+" "+dt2.getYear());
    }
    catch (ParseException e) {
        e.printStackTrace();
    }                   
    }

在第一次约会时,我就像月份一样放了21,这是不可能的。但我在控制台中有这个:

  Date : Mon Sep 01 14:00:00 GMT+01:00 2014
  Date : Tue Jan 01 14:00:00 GMT+01:00 2013
  String1 : September 2014
  String2 : January 2013

怎么会这样?通常它不应该显示第一个日期,只是正确的日期,对吧?

3 个答案:

答案 0 :(得分:6)

目前正在推迟到明年。

21 - 12 = 9 = September

因此它不会翻转,只需将其设为non-lenient

即可
sdf.setLenient(false);

答案 1 :(得分:1)

Java日期解析称为lenient - 它允许解析技术上无效的日期,并确定用户可能引用的内容。

在这个特殊情况下,它出现在2013年第21个月,假设用户在增加月份时处于懒惰状态,并将其视为2014年9月份的9月份。

可以找到有关宽大处理的更多信息in the Java documentation

答案 2 :(得分:0)

21是12 + 9所以输入这个就是你想要实际设置的日期加1年。