使用 java.time.localdate.now() 获取当前日期对象,再通过 getyear()、getmonthvalue() 和 getdayofmonth() 方法分别提取年、月、日。该方法基于系统默认时区,返回的整数类型数据可直接用于后续逻辑处理。

LocalDate 实例如何分解为年月日字段
调用 now() 后得到的对象包含完整的日期信息,通过 getter 方法可以逐个访问这些字段。例如 getYear() 返回四位年份,getMonthValue() 返回 1 到 12 的月份数值,getDayOfMonth() 返回 1 到 31 的日期数值。这种分解方式避免了旧版 Calendar API 中月份从 0 开始计数的混淆问题。

import java.time.LocalDate;
public class DateDemo {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
int year = today.getYear();
int month = today.getMonthValue();
int day = today.getDayOfMonth();
System.out.println(year + "-" + month + "-" + day);
}
}
getMonthValue() 与 getMonth().getValue() 的区别是什么
两者最终都返回相同的整型月份值,但调用路径不同。getMonthValue() 是 LocalDate 的直接方法,内部优化了访问效率;而 getMonth().getValue() 先获取 Month 枚举对象,再调用其 getValue() 方法。在性能敏感场景下推荐直接使用前者,代码也更简洁。
立即学习“Java免费学习笔记(深入)”;

import java.time.LocalDate;
import java.time.Month;
public class MonthCompare {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
int direct = date.getMonthValue();
int indirect = date.getMonth().getValue();
System.out.println(direct == indirect); // true
}
}
当系统时区变更时 LocalDate.now() 的返回值会如何变化
LocalDate.now() 依赖系统默认时区,若运行时修改了 JVM 的默认时区(如通过 TimeZone.setDefault()),再次调用 now() 将基于新时区计算日期。这意味着在不同时区环境下,即使同一物理时刻,获取到的“今天”可能不同。若需固定时区,应显式传入 ZoneId 参数。


















