使用 java.time.yearmonth.now() 方法即可获取当前日期的 yearmonth 对象。该方法默认使用系统默认时区和日历系统,返回的实例包含年份和月份信息,不包含具体的“日”。若需指定时区或日历系统,可传入 zoneid 或 chronology 参数。

YearMonth.now() 默认行为与输入条件是什么
YearMonth.now() 在调用时不接收任何日期参数,它直接从系统时钟读取当前时刻,并将其转换为 YearMonth。其核心输入是运行环境的系统设置,即默认时区(ZoneId.systemDefault())和默认日历系统(通常是 ISO)。这意味着在不同的服务器配置或时区设置下,即使在同一物理时刻调用,得到的 YearMonth 也可能不同。例如,当北京时间是 2024年5月20日 00:30 时,美国纽约时间可能仍是 2024年5月19日,因此两地调用此方法会分别得到 2024-05 和 2024-05(注意:如果跨天,月份可能不同,如北京是5月20日,纽约是5月19日,结果均为5月;但若北京是6月1日0点,纽约是5月31日,则结果分别为 2024-06 和 2024-05)。该方法的输出是一个不可变的 YearMonth 对象,可以通过 getYear() 和 getMonthValue() 提取具体数值。

import java.time.YearMonth;
import java.time.ZoneId;
public class Main {
public static void main(String[] args) {
// 1. 使用默认时区获取当前 YearMonth
YearMonth currentYM = YearMonth.now();
System.out.println("Default Zone: " + currentYM);
// 2. 指定特定时区获取 YearMonth
YearMonth newYorkYM = YearMonth.now(ZoneId.of("America/New_York"));
System.out.println("New York Zone: " + newYorkYM);
// 3. 提取年份和月份
int year = currentYM.getYear();
int month = currentYM.getMonthValue();
System.out.println("Year: " + year + ", Month: " + month);
}
}
如何基于现有日期对象转换得到 YearMonth
如果手中已有 LocalDate、ZonedDateTime 或其他日期时间对象,可以使用 toYearMonth() 方法将其转换为 YearMonth。这是处理业务逻辑中常见场景的方式,例如从用户输入的完整生日中提取年月,或从交易记录的时间戳中提取交易发生的年月。对于 LocalDate,直接调用 toYearMonth() 即可;对于 ZonedDateTime,通常先转换为 LocalDate 或直接调用 toLocalDate().toYearMonth(),因为 YearMonth 本身不包含时区信息,转换过程会丢弃时区和秒以下的精度。
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型

import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.time.YearMonth;
public class ConversionExample {
public static void main(String[] args) {
// 示例输入:一个具体的 LocalDate
LocalDate localDate = LocalDate.of(2024, 5, 20);
YearMonth ymFromLocal = localDate.toYearMonth();
System.out.println("From LocalDate: " + ymFromLocal); // 输出: 2024-05
// 示例输入:一个 ZonedDateTime
ZonedDateTime zdt = ZonedDateTime.now();
YearMonth ymFromZoned = zdt.toLocalDate().toYearMonth();
System.out.println("From ZonedDateTime: " + ymFromZoned);
// 验证:转换后的 YearMonth 是否等于原始日期的年月
boolean isEqual = (ymFromLocal.getYear() == localDate.getYear()) &&
(ymFromLocal.getMonthValue() == localDate.getMonthValue());
System.out.println("Is equal: " + isEqual); // 输出: true
}
}
YearMonth 对象在程序中的实际输出结构是怎样的
在程序中,YearMonth 对象的字符串表示遵循 ISO-8601 格式,即 yyyy-MM。例如,2024年5月会被序列化为 2024-05。这种格式便于日志记录和数据库存储。在实际代码执行中,YearMonth 内部存储了两个整数字段:year 和 month。通过 toString() 方法输出的字符串可以直接用于解析或比较。需要注意的是,YearMonth 没有 dayOfMonth 字段,因此不能直接进行涉及具体日期的计算,除非结合其他 API 如 atDay() 或 lengthOfMonth()。在调试或打印日志时,开发者应意识到其只包含年月信息,避免误以为它包含日的细节。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










