是否可以使用 Java 8 将日期截断为月份?

2022-09-01 11:29:19

我想将毫秒截断为天,我可以使用

Instant.now().truncatedTo(ChronoUnit.DAYS).toEpochMilli()

但我不能截断(它抛出一个异常)。我需要使用日历吗ChronoUnit.MONTH


答案 1

这就是java.time.temporal.TemporalAdjusters的用途。

date.with(TemporalAdjusters.firstDayOfMonth()).truncatedTo(ChronoUnit.DAYS);

答案 2

一种方法是手动将日期设置为当月的第一天:

import static java.time.ZoneOffset.UTC;
import static java.time.temporal.ChronoUnit.DAYS;

ZonedDateTime truncatedToMonth = ZonedDateTime.now(UTC).truncatedTo(DAYS).withDayOfMonth(1);
System.out.println(truncatedToMonth); //prints 2015-06-01T00:00Z
long millis = truncatedToMonth.toInstant().toEpochMilli();
System.out.println(millis); // prints 1433116800000

或者带有 的替代方案,它可能更干净:LocalDate

LocalDate firstOfMonth = LocalDate.now(UTC).withDayOfMonth(1);
long millis = firstOfMonth.atStartOfDay(UTC).toEpochSecond() * 1000;
//or
long millis = firstOfMonth.atStartOfDay(UTC).toInstant().toEpochMilli();

推荐