Java Month 枚举
最后修改时间:2025 年 4 月 16 日
java.time.Month
枚举表示一年中的十二个月。 它是 Java 8 中引入的 Java Date and Time API 的一部分。每个枚举常量都提供了用于处理月份的有用方法。
Month
是不可变的且线程安全的。 它提供了获取月份名称、长度和值的方法。 该枚举与 LocalDate
和 YearMonth
等其他日期时间类无缝协作。
Month 枚举概述
Month
枚举包含从 JANUARY 到 DECEMBER 的十二个常量。 每个常量都有查询月份属性和执行转换的方法。 该枚举遵循 ISO-8601 日历系统。
public enum Month implements TemporalAccessor, TemporalAdjuster { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER; public int getValue(); public String getDisplayName(TextStyle style, Locale locale); public int length(boolean leapYear); public int minLength(); public int maxLength(); public Month firstMonthOfQuarter(); public Month plus(long months); public Month minus(long months); }
上面的代码显示了 Month
枚举的结构和关键方法。 这些方法允许查询月份属性并执行计算。 该枚举提供了月份的数值和文本表示形式。
获取月份值
每个 Month
常量都有一个数值,从 1 (一月) 到 12 (十二月)。 getValue
方法返回此值。 这对于与使用月份数字的旧 API 兼容很有用。
package com.zetcode; import java.time.Month; public class Main { public static void main(String[] args) { // Get month values System.out.println("January value: " + Month.JANUARY.getValue()); System.out.println("December value: " + Month.DECEMBER.getValue()); // Get month from value Month month = Month.of(6); System.out.println("Month 6: " + month); // Get current month Month current = Month.from(java.time.LocalDate.now()); System.out.println("Current month: " + current); } }
此示例演示了 Month
值的基本操作。 of
方法根据其数值创建一个 Month。 from
方法从其他日期时间对象中提取 Month。
显示月份名称
getDisplayName
方法以各种文本样式提供本地化的月份名称。 这对于需要在不同格式和语言中显示月份名称的用户界面很有用。
package com.zetcode; import java.time.Month; import java.time.format.TextStyle; import java.util.Locale; public class Main { public static void main(String[] args) { // Full name in English String fullName = Month.AUGUST.getDisplayName( TextStyle.FULL, Locale.ENGLISH); System.out.println("Full name: " + fullName); // Short name in French String shortName = Month.AUGUST.getDisplayName( TextStyle.SHORT, Locale.FRENCH); System.out.println("Short name in French: " + shortName); // Narrow name in German String narrowName = Month.AUGUST.getDisplayName( TextStyle.NARROW, Locale.GERMAN); System.out.println("Narrow name in German: " + narrowName); } }
此示例显示了显示月份名称的不同方法。 TextStyle
枚举控制名称格式 (FULL、SHORT、NARROW)。 Locale
参数提供本地化支持。
处理月份长度
Month
枚举提供了查询月份长度的方法。 这些方法对于日期计算和验证至关重要。 二月的长度取决于是否为闰年。
package com.zetcode; import java.time.Month; public class Main { public static void main(String[] args) { // Regular month lengths System.out.println("January days: " + Month.JANUARY.length(false)); System.out.println("April days: " + Month.APRIL.length(false)); // February in leap year System.out.println("February in leap year: " + Month.FEBRUARY.length(true)); // Min and max lengths System.out.println("February min days: " + Month.FEBRUARY.minLength()); System.out.println("February max days: " + Month.FEBRUARY.maxLength()); } }
此示例演示了月份长度查询。 大多数月份的长度是固定的,但二月有所不同。 minLength
和 maxLength
方法提供了二月长度的边界。
月份算术
Month
枚举通过 plus
和 minus
方法支持算术运算。 这些操作在年份边界处环绕,使其对基于月份的计算很有用。
package com.zetcode; import java.time.Month; public class Main { public static void main(String[] args) { // Basic arithmetic Month nextMonth = Month.JANUARY.plus(1); System.out.println("January + 1: " + nextMonth); Month prevMonth = Month.JANUARY.minus(1); System.out.println("January - 1: " + prevMonth); // Wrapping around year boundary Month decPlus2 = Month.DECEMBER.plus(2); System.out.println("December + 2: " + decPlus2); Month janMinus3 = Month.JANUARY.minus(3); System.out.println("January - 3: " + janMinus3); // Large values Month janPlus25 = Month.JANUARY.plus(25); System.out.println("January + 25: " + janPlus25); } }
此示例显示了月份算术运算。 计算在年份边界自动环绕。 将 1 加到 12 月得到 1 月,从 1 月减去 1 得到 12 月。
处理季度
firstMonthOfQuarter
方法返回每个季度的第一个月。 这对于按季度组织时间的金融和商业应用程序很有用。
package com.zetcode; import java.time.Month; public class Main { public static void main(String[] args) { // Get first month of quarters System.out.println("Q1 starts with: " + Month.JANUARY.firstMonthOfQuarter()); System.out.println("Q2 starts with: " + Month.APRIL.firstMonthOfQuarter()); System.out.println("Q3 starts with: " + Month.JULY.firstMonthOfQuarter()); System.out.println("Q4 starts with: " + Month.OCTOBER.firstMonthOfQuarter()); // Any month in quarter returns same result System.out.println("May's quarter starts with: " + Month.MAY.firstMonthOfQuarter()); } }
此示例演示了与季度相关的操作。 每个季度由三个月组成,该方法返回第一个月,无论用于调用它的季度中的哪个月。
将 Month 与 LocalDate 结合使用
Month
枚举与 LocalDate
无缝协作。 这种组合对于日期操作和查询非常强大。 这些示例显示了这些类之间的常见操作。
package com.zetcode; import java.time.LocalDate; import java.time.Month; import java.time.Year; public class Main { public static void main(String[] args) { // Create date with Month enum LocalDate date1 = LocalDate.of(2025, Month.JANUARY, 15); System.out.println("Date with Month enum: " + date1); // Get month from date Month month = date1.getMonth(); System.out.println("Month from date: " + month); // Create date at start of month LocalDate startOfMonth = Year.now().atMonth(Month.MARCH).atDay(1); System.out.println("Start of March: " + startOfMonth); // Check if month has 31 days boolean has31Days = month.maxLength() == 31; System.out.println(month + " has 31 days: " + has31Days); } }
此示例显示了 Month
和 LocalDate
之间的集成。 创建日期时,Month 枚举提供类型安全。 该示例还演示了从日期查询月份属性。
来源
在本文中,我们介绍了 Java Month 枚举的基本方法和功能。 了解这些概念对于现代 Java 应用程序中的日期处理至关重要。
作者
列出所有Java教程。