首页 > 解决方案 > java 8 新的日期/时间 API 获取一年中的第一天

问题描述

使用 java 7,我们可以得到一年中的第一天

    Calendar currentCal = Calendar.getInstance();
    currentCal.set(Calendar.DAY_OF_YEAR, 1);
    currentCal.set(Calendar.MONTH, 0);
    currentCal.set(Calendar.DAY_OF_MONTH, 1);
    currentCal.set(Calendar.HOUR_OF_DAY, 0);
    currentCal.set(Calendar.MINUTE, 0);
    currentCal.set(Calendar.SECOND, 0);
    currentCal.set(Calendar.MILLISECOND, 0);
    //currentCal.getTime();

如何在 java 8 new Date/Time API 中像这样获得一年中的第一天?

标签: javajava-8

解决方案


    LocalDate firstDayOfThisYear = Year.now(ZoneId.systemDefault()).atDay(1);
    System.out.println(firstDayOfThisYear);

我刚才运行的输出:

2021-01-01

该类Year在旧的日期时间 API 中没有相应的表示形式,但对于这种情况很方便。

您可能已经知道,aLocalDate是没有时间的日期。既然你要求一年的第一天,我认为这门课适合你。对于旧课程,我们将被迫也决定一天中的时间。使用 java.time 我们不是。如果您确实需要一天中的某个时间,您可能希望转换为ZonedDateTime( OffsetDateTimeInstant并且LocalDateTime是其他选项,具体取决于您的精确要求)。

您需要选择一个时区,因为新年不会在所有时区同时发生。在极端情况下,如果您使用了不正确的时区,您的结果将是一整年。我假设您的 JVM 的默认时区很好。使用时区 ID 可能更安全,例如ZoneId.of("Asia/Ho_Chi_Minh").


推荐阅读