java中将字符串解析为日期格式默认日期为1,月份为一月

Shr*_*hat 2 java

我正在尝试接受用户输入的日期格式,例如:“2000 小时,星期四,2015 年 7 月 20 日”。然后我会将其转换为日期格式以对其进行操作。但从字符串到日期的转换默认月份为一月,日期为 1。以下是代码片段:

    String userDateFormat = "HHmm 'hrs', EEEE, MMMM dd, YYYY";
    SimpleDateFormat userDateFormatter = new SimpleDateFormat(userDateFormat);
    String reference_date = "2000 hrs, Thursday, July 20, 2015";

    Date date = null;
    try {
        date = userDateFormatter.parse(reference_date);
    } catch (ParseException e) {
        System.out.println("Date must be in the format " + userDateFormat);
    }

    System.out.println(userDateFormatter.format(date));
Run Code Online (Sandbox Code Playgroud)

以下方法块打印:2000 小时,星期四,2015 年 1 月 1 日。有任何线索吗?

Ell*_*sch 5

因为您YYYY在需要时使用yyyy,而 2015 年 7 月 20 日是星期一。你想要类似的东西

String userDateFormat = "HHmm 'hrs', EEEE, MMMM dd, yyyy";
SimpleDateFormat userDateFormatter = new SimpleDateFormat(
        userDateFormat);
String reference_date = "2000 hrs, Monday, July 20, 2015";
Run Code Online (Sandbox Code Playgroud)

然后输出

2000 hrs, Monday, July 20, 2015
Run Code Online (Sandbox Code Playgroud)

然后SimpleDateFormatJavadoc 说(部分)

Letter    Date or Time Component  Presentation    Examples
G         Era designator          Text            AD
y         Year                    Year            1996; 96
Y         Week year               Year            2009; 09
Run Code Online (Sandbox Code Playgroud)