2

我想用名字显示月份。所以我正在使用 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

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

4

3 回答 3

6

它目前正在滚动到明年。

21 - 12 = 9 = September

这样它就不会翻车,只是让它变得不宽容

sdf.setLenient(false);
于 2013-09-06T15:54:37.677 回答
1

Java 日期解析被称为lenient- 它允许解析在技术上无效的日期,并计算出用户可能指的是什么。

在这种特殊情况下,它是 2013 年 21 月,假设用户在增加月份时很懒惰,并将其视为 2014 年 9 月 - 9 月。

有关宽大处理的更多信息,请参见 Java 文档

于 2013-09-06T15:55:11.830 回答
0

21 是 12+9,因此通过输入此值,您将实际设置的日期添加了 1 年。

于 2013-09-06T16:00:43.637 回答