Java获取本月第一天和最后一天
在Java中,我们经常会遇到需要获取本月第一天和最后一天的情况。例如,在统计月度报表、计算工资等场景下,我们需要获取当前月份的开始日期和结束日期。本文将介绍如何使用Java代码获取本月第一天和最后一天,并提供相关的代码示例。
方法一:使用Calendar类
Java中的Calendar类提供了一系列的方法,可以用于获取日期和时间的各个部分。我们可以利用这些方法来获取本月的第一天和最后一天。
import java.util.Calendar;
public class DateUtils {
public static void main(String[] args) {
// 获取本月第一天
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
String firstDayOfMonth = calendar.getTime().toString();
System.out.println("本月第一天:" + firstDayOfMonth);
// 获取本月最后一天
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
String lastDayOfMonth = calendar.getTime().toString();
System.out.println("本月最后一天:" + lastDayOfMonth);
}
}
上述代码中,我们首先通过Calendar.getInstance()
方法获取一个Calendar实例,然后使用set()
方法将日期设置为本月的第一天。接着,我们通过getTime()
方法获取Calendar对象对应的Date对象,并转换为字符串输出。
接下来,我们使用set()
方法将日期设置为本月的最后一天。getActualMaximum(Calendar.DAY_OF_MONTH)
方法返回本月的最大天数。最后,我们同样使用getTime()
方法将Calendar对象转换为字符串输出。
方法二:使用Java 8的LocalDate类
Java 8中引入了新的日期和时间API,其中的LocalDate
类提供了获取日期的各个部分的方法,使得获取本月第一天和最后一天变得更加简单。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateUtils {
public static void main(String[] args) {
// 获取本月第一天
LocalDate firstDayOfMonth = LocalDate.now().withDayOfMonth(1);
String firstDayOfMonthStr = firstDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("本月第一天:" + firstDayOfMonthStr);
// 获取本月最后一天
LocalDate lastDayOfMonth = LocalDate.now().withDayOfMonth(firstDayOfMonth.lengthOfMonth());
String lastDayOfMonthStr = lastDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("本月最后一天:" + lastDayOfMonthStr);
}
}
上述代码中,我们首先使用LocalDate.now()
方法获取当前日期,并使用withDayOfMonth(1)
方法将日期设置为本月的第一天。然后,我们使用format()
方法将LocalDate
对象转换为字符串,指定了日期的格式为"yyyy-MM-dd"。
接下来,我们通过firstDayOfMonth.lengthOfMonth()
方法获取本月的最大天数,并使用withDayOfMonth()
方法将日期设置为本月的最后一天。同样,我们将LocalDate
对象转换为字符串输出。
甘特图
下面是一个使用甘特图表示上述代码的运行过程:
gantt
dateFormat YYYY-MM-DD
title 获取本月第一天和最后一天
section 使用Calendar类
获取本月第一天 :a1, 2022-01-01, 7d
获取本月最后一天 :a2, after a1, 7d
section 使用LocalDate类
获取本月第一天 :a3, after a2, 7d
获取本月最后一天 :a4, after a3, 7d
类图
下面是一个使用类图表示上述代码中涉及的类和方法的关系:
classDiagram
class Calendar {
+ static Calendar getInstance()
+ void set(int field, int value)
+ int getActualMaximum(int field)
+ Date getTime()
}
class LocalDate {
+ static LocalDate now()
+ LocalDate withDayOfMonth(int dayOfMonth)
+ int lengthOfMonth()
+ String format(DateTimeFormatter formatter)
}
class DateTimeFormatter {
+ static DateTimeFormatter ofPattern(String pattern)
}
class Date {
+ String toString()
}
class DateUtils {
+ static void main(String[] args)
}
Calendar ..> Date
LocalDate ..> Date