java 获取给定月份和给定年份的第一个日期和最后一个日期 java.time.YearMonth方法atDay & atEndOfMonth 关于 java.time

2022-09-03 16:34:19

我正在尝试获取给定月份和年份的第一个日期和最后一个日期。我使用以下代码以yMMdd格式获取最后一个日期。但无法获得此格式。另外,我希望开始日期采用相同的格式。我仍在为此努力。任何人都可以帮我修复下面的代码。

public static java.util.Date calculateMonthEndDate(int month, int year) {
    int[] daysInAMonth = { 29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int day = daysInAMonth[month];
    boolean isLeapYear = new GregorianCalendar().isLeapYear(year);

    if (isLeapYear && month == 2) {
        day++;
    }
    GregorianCalendar gc = new GregorianCalendar(year, month - 1, day);
    java.util.Date monthEndDate = new java.util.Date(gc.getTime().getTime());
    return monthEndDate;
}

public static void main(String[] args) {
    int month = 3;
    int year = 2076;
    final java.util.Date calculatedDate = calculateMonthEndDate(month, year);
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
    format.format(calculatedDate);
    System.out.println("Calculated month end date : " + calculatedDate);
} 

答案 1

java.time.YearMonth方法atDay & atEndOfMonth

Java 8+(教程)中内置的java.time框架具有用于此的命令。

恰如其分的 YearMonth 类表示一年中的一个月,没有任何特定的日期或时间。从那里我们可以要求每月的第一天和几天。

YearMonth yearMonth = YearMonth.of( 2015, 1 );     // 2015-01. January of 2015.
LocalDate firstOfMonth = yearMonth.atDay( 1 );     // 2015-01-01
LocalDate lastOfMonth = yearMonth.atEndOfMonth();  // 2015-01-31

关于 java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧日期时间类,如java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。

要了解更多信息,请参阅 Oracle 教程。搜索 Stack Overflow 以获取许多示例和解释。规格是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。不需要字符串,不需要类。java.sql.*

从哪里获取 java.time 类?

ThreeTen-Extra 项目通过其他类扩展了 java.time。这个项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuarter


答案 2

简单地说,你可以使用日历类。你应该分配月份变量,你想要哪个月份

        Calendar gc = new GregorianCalendar();
        gc.set(Calendar.MONTH, month);
        gc.set(Calendar.DAY_OF_MONTH, 1);
        Date monthStart = gc.getTime();
        gc.add(Calendar.MONTH, 1);
        gc.add(Calendar.DAY_OF_MONTH, -1);
        Date monthEnd = gc.getTime();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");

        System.out.println("Calculated month start date : " + format.format(monthStart));
        System.out.println("Calculated month end date : " + format.format(monthEnd));