Java 8 新Date/Time API如何获取一年的第一天?
Java 8 新Date/Time API获取一年第一天的实现方案
你给出的Java7 Calendar 写法中重复设置了多个日期属性,实际逻辑是取当前时区当年1月1日的零点零分零秒,Java8 新API可以更简洁实现同等效果:
核心依赖导入(全部在java.time包下)
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.temporal.TemporalAdjusters; import java.util.Date;
常用实现方式
- 场景1:获取本地时区年首日期时间,完全匹配原
Calendar默认逻辑
// 直接得到年首零点的LocalDateTime LocalDateTime firstDayOfYear = LocalDate.now() .with(TemporalAdjusters.firstDayOfYear()) .atStartOfDay(); // 如果需要兼容旧代码转成java.util.Date Date dateResult = Date.from(firstDayOfYear.atZone(ZoneId.systemDefault()).toInstant());
- 场景2:需要保留时区信息的场景
import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; ZonedDateTime firstDayOfYear = ZonedDateTime.now(ZoneId.systemDefault()) .with(TemporalAdjusters.firstDayOfYear()) .truncatedTo(ChronoUnit.DAYS);
以上实现会自动将日期调整为当年1月1日,同时将时分秒毫秒全部置为0,和原Java7实现效果完全一致。
内容的提问来源于stack exchange,提问作者Tung Vo
相关产品推荐
相关产品推荐

