微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用 31 天解析二月和月份的日期?

如何解决如何用 31 天解析二月和月份的日期?

感谢您提供可能的答案。问题是,我使用带有 Java 1.4 的遗留系统。在注册表中,您有以下字段: mm / yyyy 格式的“Period” 'Expiration Day' 将日期与句点连接起来并解析为日期。

我需要处理 2 月的 29 个月和 31 天的月份。将“到期日”设置为 31,当是 2 月时,解析将在 03/01/2021 播放,在不是 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.

解决方法

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

Java 8 及更高版本:java.time

我建议您使用 java.time,现代 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

Java 6 和 7:java.time 到 ThreeTen Backport

代码同上。 java.time 已在 ThreeTen Backport 项目中向后移植到 Java 6 和 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());

2021 年欧洲中部时间 2 月 28 日星期日 00:00:00

链接

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。