LocalDateTime获取当前月第一天和最后一天
时间: 2025-01-07 21:33:14 浏览: 6
### 使用Java `LocalDateTime` 获取当前月份的第一天和最后一天
为了获取当前月份的第一天和最后一天的时间戳,可以使用 Java 8 中引入的 `LocalDateTime` 和 `TemporalAdjusters` 工具类。以下是具体实现方法:
#### 方法一:使用 `TemporalAdjusters`
通过 `TemporalAdjusters` 可以方便地调整日期时间对象到特定的位置。
```java
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
public class Main {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
// 获取当月第一天的 LocalDateTime 对象
LocalDateTime startOfMonth = LocalDateTime.of(
today.with(TemporalAdjusters.firstDayOfMonth()),
LocalTime.MIN);
// 获取当月最后一天的 LocalDateTime 对象
LocalDateTime endOfMonth = LocalDateTime.of(
today.with(TemporalAdjusters.lastDayOfMonth()),
LocalTime.MAX);
System.out.println("Start of month: " + startOfMonth);
System.out.println("End of month: " + endOfMonth);
}
}
```
这段代码创建了两个 `LocalDateTime` 实例来表示一个月的第一个时刻和最后一个时刻[^1]。
#### 方法二:手动构建日期
另一种方式是直接指定年份、月份并设置日部分为固定值(即每月首日设为1号),对于月末则继续借助 `TemporalAdjusters` 来自动计算该月的最大天数。
```java
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.YearMonth;
import java.time.LocalTime;
public class Main {
public static void main(String[] args) {
YearMonth currentYearMonth = YearMonth.from(LocalDate.now());
// 构建当月第一天的 LocalDateTime 对象
LocalDateTime startOfMonth = LocalDateTime.of(currentYearMonth.getYear(),
currentYearMonth.getMonth(),
1,
0, 0, 0);
// 构建当月最后一天的 LocalDateTime 对象
int lastDay = currentYearMonth.lengthOfMonth();
LocalDateTime endOfMonth = LocalDateTime.of(currentYearMonth.getYear(),
currentYearMonth.getMonth(),
lastDay,
23, 59, 59);
System.out.println("Start of month: " + startOfMonth);
System.out.println("End of month: " + endOfMonth);
}
}
```
这种方法同样能够得到相同的结果,不过更直观一些,在某些场景下可能更容易理解[^2]。
阅读全文