java 8 引入的 `java.time` api 中,获取当前日期的 chronofield 值最直接的方式是使用 `localdate.now()` 获取当前日期对象,然后调用其 `get(chronofield.xxx)` 方法提取具体的字段值。例如,要获取当前的年份、月份或星期几,只需传入对应的 `chronofield` 枚举常量即可。这种方法避免了旧版 `calendar` 类的复杂性和线程安全问题,代码简洁且类型安全。

如何获取当前日期的具体年月日数值
要获取当前日期的年、月、日具体数值,可以使用 `LocalDate.now().get(ChronoField.YEAR/MONTH_OF_YEAR/DAY_OF_MONTH)`。这些字段分别对应公历中的年份、月份(1-12)和日期(1-31)。通过这种方式,你可以轻松地将当前日期分解为独立的数值组件,用于业务逻辑判断或数据展示。

import java.time.LocalDate;
import java.time.temporal.ChronoField;
public class DateFieldExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
int year = today.get(ChronoField.YEAR);
int month = today.get(ChronoField.MONTH_OF_YEAR);
int day = today.get(ChronoField.DAY_OF_MONTH);
System.out.println("Year: " + year);
System.out.println("Month: " + month);
System.out.println("Day: " + day);
}
}
如何获取当前日期的星期和季度信息
除了基本的年月日,`ChronoField` 还提供了星期和季度的支持。使用 `ChronoField.DAY_OF_WEEK` 可以获取星期几(1=Monday, ..., 7=Sunday),而 `ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH` 等字段则提供基于周的排列信息。虽然 `ChronoField` 没有直接的季度字段,但可以通过月份计算得出,或者使用 `IsoFields.QUARTER_OF_YEAR`(需导入 `java.time.chrono.IsoFields`)。这里主要演示星期信息的获取,因为它是 `ChronoField` 直接支持的常用字段。
立即学习“Java免费学习笔记(深入)”;

import java.time.LocalDate;
import java.time.temporal.ChronoField;
public class WeekFieldExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
// 获取星期几,1表示周一,7表示周日
int dayOfWeek = today.get(ChronoField.DAY_OF_WEEK);
System.out.println("Day of Week (1-7): " + dayOfWeek);
// 也可以获取一年中的第几天
int dayOfYear = today.get(ChronoField.DAY_OF_YEAR);
System.out.println("Day of Year: " + dayOfYear);
}
}
当日期对象为空时调用 get 方法会发生什么
如果尝试在一个为 `null` 的 `LocalDate` 对象上调用 `get(ChronoField)` 方法,程序将抛出 `NullPointerException`。这是因为 `get` 是实例方法,必须在非空对象上调用。在实际开发中,应确保 `LocalDate.now()` 或其他创建日期的方法返回了有效对象,或者在使用前进行 null 检查。此外,如果请求的字段不在该日期对象的范围内(例如对 `LocalTime` 请求 `YEAR`),则会抛出 `DateTimeException`,但 `LocalDate` 包含所有日历字段,所以通常不会发生这种情况。


















