繁体   English   中英

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

[英]How to parse the date for February and months with 31 days?

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

我需要处理 29 月份和 31 天月份。 设置“到期日”= 31,当它是 2 月时,解析将在 2021 年 3 月 1 日播放,而在不是 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);

Output:

2021-02-28

Java 6 和 7:java.time 通过 ThreeTen Backport

代码与上面相同。 java.time 已在 ThreeTen Backport 项目中向后移植到 Java 6 和 7。 链接在底部。

Java 1.5:乔达时间

    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 CET

链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM