有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Month二月在下面的程序中被解析为'33'。如何修复?

在下面的程序中,二月被解析为“33”。在其他月份,它工作正常

// Stores the inputed date which needs to be converted
String date = "2/2/2016";

// Create DateFormat object for the inputed format.
DateFormat df = new SimpleDateFormat("M/d/yyyy");

// Convert the String date to Date object using inputed format
Date d = df.parse(date);        

// Create date object for format in which the inputed date needs to be converted
df = new SimpleDateFormat("MMDDYYYY");


// Convert the inputed date
String convertedDate = df.format(d);

System.out.println(convertedDate);

产量为02332016


共 (5) 个答案

  1. # 1 楼答案

    请找到下面的代码

    //存储需要转换的输入日期

    String date = "2/2/2016";
    
            // Create DateFormat object for the inputed format.
            DateFormat df = new SimpleDateFormat("M/d/yyyy");
    
            // Convert the String date to Date object using inputed format
            Date d;
            try {
                d = df.parse(date);
                // Create date object for format in which the inputed date needs to be converted
                df = new SimpleDateFormat("MMddYYYY");
    
    
                // Convert the inputed date
                String convertedDate = df.format(d);
    
                System.out.println(convertedDate);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }       
    

    输出:02022016

  2. # 2 楼答案

    你应该用“dd”来表示日期。尝试将代码替换为

     df = new SimpleDateFormat("MMddYYYY");
    

    如果您想查看SimpleDataFormat的文档,这里是link

  3. # 3 楼答案

    将大写的D替换为小写的d

    // Create date object for format in which the inputed date needs to be converted
    df = new SimpleDateFormat("MMddYYYY");
    

    下次读documentation

  4. # 4 楼答案

    你应该在^{中使用字母d(小写)。字母D(大写)表示一年中的天数。这就是为什么你会得到33分,因为2016年2月2日是一年中的第33天

  5. # 5 楼答案

    我想知道为什么到目前为止给出的所有答案都忽略了第二个错误(使用基于周的年份Y而不是正确的Y,这可能会在日历年开始时造成麻烦),所以正确的代码必须如下所示:

    DateFormat df = new SimpleDateFormat("M/d/yyyy");
    Date d = df.parse("2/2/2016");        
    df = new SimpleDateFormat("MMddyyyy");
    String convertedDate = df.format(d);
    System.out.println(convertedDate); // 02022016
    

    重要的是要理解模式符号是区分大小写的,并随大小写改变其含义

    • d=月日(02)
    • D=一年中的某一天(1月的33天=31天+2月的2天)
    • y=年代
    • Y=以周为基础的年份,与每年变化前后的日历年不同(例如:2016年1月2日使用Y表示2015年!!!)