📜  Java的.time.MonthDay类在Java中(1)

📅  最后修改于: 2023-12-03 15:32:04.626000             🧑  作者: Mango

Java中的MonthDay类

Java的MonthDay类是一个不可变类,它表示月份和日期,但没有年份。MonthDay类提供了一些方法来获取和操作月份和日期,以及测试是否等于另一个MonthDay对象。

构造函数

MonthDay类可以使用以下构造函数进行实例化:

public static MonthDay now()

public static MonthDay now(ZoneId zone)

public static MonthDay of(int month, int dayOfMonth)

public static MonthDay of(Month month, int dayOfMonth)

public static MonthDay from(TemporalAccessor temporal)

其中,now()和now(ZoneId zone)构造器用于创建一个表示当前月份和日期的MonthDay对象。of(int month, int dayOfMonth)用于以指定月份和日期来创建MonthDay对象。最后,of(Month month, int dayOfMonth)构造器用于以枚举类型Month来表示月份,而非整数。from(TemporalAccessor temporal)则基于给定的时间对象来创建MonthDay对象。

方法

MonthDay类提供了许多实用的方法,例如:

获取月份和日期
public int getMonthValue()

public Month getMonth()

public int getDayOfMonth()

这些方法用于获取MonthDay对象的月份和日期。getMonthValue()方法返回月份(介于1~12之间)。getMonth()方法返回Month枚举类型的月份。getDayOfMonth()返回月份中的日期。

判断月份和日期是否相等
public boolean equals(Object obj)

public int hashCode()

MonthDay类重写了equals()和hashCode()方法,因此可以使用这些方法来比较两个MonthDay对象是否相等。这是基于月份和日期的比较,而不考虑年份。

判断是否在当前日期之前/之后
public boolean isBefore(MonthDay other)

public boolean isAfter(MonthDay other)

这些方法用于将MonthDay对象与另一个MonthDay对象进行比较。isBefore()方法返回true,如果调用对象的日期比参数(other)的日期早;否则返回false。isAfter()方法返回true,如果调用对象的日期比参数(other)的日期晚;否则返回false。

日期的字符串表达式
public String toString()

public String format(DateTimeFormatter formatter)

toString()方法返回一个字符串表示MonthDay对象,例如:“--12-31”表示12月31日。format()方法将MonthDay对象格式化为指定格式的字符串。

示例代码

以下是一个简单的Java示例代码,演示了如何使用MonthDay类:

import java.time.MonthDay;
import java.time.Month;

public class Main {
  public static void main(String[] args) {
    // 创建一个 MonthDay 对象
    MonthDay md = MonthDay.of(Month.JANUARY, 1);
    
    // 获取月份
    int month = md.getMonthValue();
    System.out.println("Month: " + month); // Month: 1
    
    // 获取日期
    int day = md.getDayOfMonth();
    System.out.println("Day: " + day); // Day: 1
    
    // 判断是否与另一个 MonthDay 对象相等
    MonthDay md2 = MonthDay.of(Month.DECEMBER, 31);
    boolean isEqual = md.equals(md2);
    System.out.println("Is equal: " + isEqual); // Is equal: false
    
    // 判断是否晚于另一个 MonthDay 对象
    boolean isAfter = md.isAfter(md2);
    System.out.println("Is after: " + isAfter); // Is after: false
    
    // 获取字符串表示
    String str = md.toString();
    System.out.println("MonthDay: " + str); // MonthDay: --01-01
  }
}

以上代码输出结果如下:

Month: 1
Day: 1
Is equal: false
Is after: false
MonthDay: --01-01
结论

MonthDay类提供了一个方便的方法来表示日期,特别是在没有年份信息的情况下。它提供了许多有用的方法来获取、操作和比较月份和日期。MonthDay对象是不可变的,因此可以安全地在多个线程之间共享。