ZetCode

Java JapaneseEra 类

最后修改时间:2025 年 4 月 16 日

java.time.chrono.JapaneseEra 类表示日本天皇年号历法中的一个年号。每个年号对应着一位天皇的统治时期。该类是 Java 8 中引入的 Java 现代日期时间 API 的一部分。

JapaneseEra 是不可变的,并且是线程安全的。它与其他类(如 JapaneseDate)一起使用,以提供完整的日本日历支持。该类定义了已知年号的常量,并支持未来的年号。

JapaneseEra 类概述

JapaneseEra 提供了获取年号信息和在年号之间转换的方法。关键操作包括获取当前年号、通过数值查找年号以及处理日本日期。该类处理年号转换。

public final class JapaneseEra implements Era, Serializable {
    public static JapaneseEra of(int japaneseEra);
    public static JapaneseEra valueOf(String japaneseEra);
    public static JapaneseEra[] values();
    public static JapaneseEra current();
    public int getValue();
    public String getDisplayName(TextStyle style, Locale locale);
}

上面的代码展示了 JapaneseEra 提供的关键方法。这些方法允许进行年号查找、转换和显示。该类支持预定义的和未来的日本年号。

获取当前日本年号

可以使用 current 方法获取当前的日本年号。这对于需要在日本日历系统中显示日期的应用程序很有用。该方法根据系统时钟返回年号。

Main.java
package com.zetcode;

import java.time.chrono.JapaneseEra;

public class Main {

    public static void main(String[] args) {
        
        JapaneseEra currentEra = JapaneseEra.current();
        System.out.println("Current Japanese era: " + currentEra);
        System.out.println("Era value: " + currentEra.getValue());
        System.out.println("Display name: " + 
            currentEra.getDisplayName(java.time.format.TextStyle.FULL, 
            java.util.Locale.ENGLISH));
    }
}

此示例演示了如何获取当前的日本年号。输出显示了年号对象、其数值和显示名称。显示名称根据语言环境和文本样式而异。

列出所有日本年号

可以使用 values 方法检索所有可用的日本年号。这将返回一个按时间顺序排列的所有已定义年号的数组。每个年号都有一个唯一的数值。

Main.java
package com.zetcode;

import java.time.chrono.JapaneseEra;

public class Main {

    public static void main(String[] args) {
        
        JapaneseEra[] eras = JapaneseEra.values();
        
        System.out.println("Japanese eras:");
        for (JapaneseEra era : eras) {
            System.out.printf("%s (value: %d)%n", era, era.getValue());
        }
    }
}

此示例列出了所有日本年号及其数值。输出显示了从明治 (1868) 到当前年号的年号。也支持未来的年号。

按数值获取日本年号

可以使用 of 方法通过其数值检索特定的年号。每个年号都有一个由日本日历系统分配的唯一值。这允许精确的年号选择。

Main.java
package com.zetcode;

import java.time.chrono.JapaneseEra;

public class Main {

    public static void main(String[] args) {
        
        // Get Heisei era (1989-2019)
        JapaneseEra heisei = JapaneseEra.of(JapaneseEra.HEISEI.getValue());
        System.out.println("Heisei era: " + heisei);
        
        // Get Showa era (1926-1989)
        JapaneseEra showa = JapaneseEra.of(2);
        System.out.println("Showa era: " + showa);
        
        // Get Meiji era (1868-1912)
        JapaneseEra meiji = JapaneseEra.of(-1);
        System.out.println("Meiji era: " + meiji);
    }
}

此示例展示了如何通过其数值检索特定的日本年号。请注意,明治年号的值为 -1,大正年号为 0,昭和年号为 2,依此类推。常量可用于近年号。

使用 JapaneseEra 创建 JapaneseDate

JapaneseEra 经常与 JapaneseDate 一起使用,以在日本日历系统中创建日期。这种组合提供了完整的日本日期处理功能。

Main.java
package com.zetcode;

import java.time.chrono.JapaneseDate;
import java.time.chrono.JapaneseEra;
import java.time.LocalDate;

public class Main {

    public static void main(String[] args) {
        
        // Current date in Japanese calendar
        JapaneseDate currentJapaneseDate = JapaneseDate.now();
        System.out.println("Current Japanese date: " + currentJapaneseDate);
        
        // Specific date in Showa era
        JapaneseDate showaDate = JapaneseDate.of(JapaneseEra.SHOWA, 64, 1, 7);
        System.out.println("Showa 64-1-7: " + showaDate);
        
        // Convert from LocalDate
        JapaneseDate convertedDate = JapaneseDate.from(LocalDate.of(2019, 4, 30));
        System.out.println("Converted date: " + convertedDate);
    }
}

此示例演示了如何使用年号创建日本日期。输出显示了日本日历格式的日期(年号-年-月-日)。也支持从 ISO 日期的转换。

格式化 JapaneseEra 名称

可以使用 getDisplayName 格式化日本年号的显示名称,以适应不同的语言环境和样式。这对于显示日本日期的本地化用户界面很有用。

Main.java
package com.zetcode;

import java.time.chrono.JapaneseEra;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        
        JapaneseEra reiwa = JapaneseEra.current();
        
        System.out.println("Full name in English: " + 
            reiwa.getDisplayName(TextStyle.FULL, Locale.ENGLISH));
        System.out.println("Short name in English: " + 
            reiwa.getDisplayName(TextStyle.SHORT, Locale.ENGLISH));
        System.out.println("Full name in Japanese: " + 
            reiwa.getDisplayName(TextStyle.FULL, Locale.JAPANESE));
        System.out.println("Short name in Japanese: " + 
            reiwa.getDisplayName(TextStyle.SHORT, Locale.JAPANESE));
    }
}

此示例展示了如何根据语言环境和样式不同地格式化年号名称。输出根据参数的不同,从全名(“令和”)到缩写(“R”)有所不同。

处理未来的日本年号

JapaneseEra 类旨在处理尚未定义的未来年号。这确保了应用程序在引入新年号时将继续工作。

Main.java
package com.zetcode;

import java.time.chrono.JapaneseEra;
import java.time.chrono.JapaneseDate;
import java.time.LocalDate;

public class Main {

    public static void main(String[] args) {
        
        // Hypothetical future era (value 6 would be next after Reiwa)
        JapaneseEra futureEra = JapaneseEra.of(6);
        System.out.println("Future era: " + futureEra);
        
        // Create date in future era
        JapaneseDate futureDate = JapaneseDate.of(futureEra, 3, 5, 10);
        System.out.println("Future date: " + futureDate);
        
        // Verify future era properties
        System.out.println("Future era value: " + futureEra.getValue());
        System.out.println("Future era name: " + 
            futureEra.getDisplayName(
                java.time.format.TextStyle.FULL, 
                java.util.Locale.ENGLISH));
    }
}

此示例演示了未来日本年号的处理。虽然显示名称可能是通用的,但该类保留了未来年号的所有功能。应用程序可以在官方定义之前安全地使用这些年号。

来源

Java JapaneseEra 类文档

在本文中,我们介绍了 Java JapaneseEra 类的基本方法和特性。理解这些概念对于在 Java 应用程序中处理日本日历日期至关重要。

作者

我的名字是 Jan Bodnar,我是一位敬业的程序员,在这个领域拥有多年的经验。我从 2007 年开始撰写编程文章,至今已撰写了 1,400 多篇文章和八本电子书。凭借超过八年的教学经验,我致力于分享我的知识并帮助他人掌握编程概念。

列出所有Java教程