有 Java 编程相关的问题?

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

java如何解析2月和31天的月份的日期?

我感谢你可能的答案。问题是,我使用的是Java 1.4遗留系统。在注册表单中,您有以下字段:mm/yyyy格式的“到期日”将日期与期间连接起来,并解析日期

我需要处理2月份29天的月份和31天的月份。将“到期日”设为31,即2021年1月3日为2月,非31月为下个月的第一天。我需要在这些情况下,解析取当月的最后一天,而不是下个月。我已经研究过了,但没有看到如何通过解析本身来实现

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date dataDebito = df.parse(31 + "/" + 02 + "/" + 2021); //February is not 31 and I need you to parse it for 2/28/2021 or 2/29/2021 if it was a leap year.

共 (1) 个答案

  1. # 1 楼答案

    我将介绍不同Java版本的解决方案

    Java8及更高版本:Java。时间

    我建议您使用java。时间,现代Java日期和时间API,用于约会工作

        DateTimeFormatter expirationParser = DateTimeFormatter.ofPattern("MM/uuuu");
         
        String expirationString = "02/2021";
        
        LocalDate expirationDay = YearMonth.parse(expirationString, expirationParser)
                .atEndOfMonth();
    
        System.out.println(expirationDay);
    

    输出:

    2021-02-28

    Java6和Java7:Java。时间过了三十分钟

    代码同上。JAVA在Three Ten Backport项目中,时间已被向后移植到Java 6和Java 7。链接在底部

    Java 1.5:Joda时间

        DateTimeFormatter expirationParser = DateTimeFormat.forPattern("MM/yyyy");
        
        String expirationString = "02/2021";
    
        LocalDate expirationDay = YearMonth.parse(expirationString, expirationParser)
                .plusMonths(1) // following month
                .toLocalDate(1) // day 1 of month
                .minusDays(1); // last day of expiration month
        
        System.out.println(expirationDay);
    

    2021-02-28

    Java 1.1到1.4:日历

        DateFormat expirationFormat = new SimpleDateFormat("MM/yyyy");
        
        String expirationString = "02/2021";
    
        Date expirationMonth = expirationFormat.parse(expirationString);
        Calendar expirationCalendar = Calendar.getInstance();
        expirationCalendar.setTime(expirationMonth);
        expirationCalendar.add(Calendar.MONTH, 1); // 1st of following month
        expirationCalendar.add(Calendar.DATE, -1); // Last day of expiration month
    
        System.out.println(expirationCalendar.getTime());
    

    Sun Feb 28 00:00:00 CET 2021

    链接