You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用ICU包将英文日期格式化为指定日本年号格式R010501

解决ICU JapaneseCalendar日期格式化补零问题

我来帮你搞定这个日期格式化的问题!你现在得到R151而不是预期的R010501,核心原因是用了预定义的SHORT格式——这种样式会自动省略数字的前导零,而且默认输出的是无分隔符但无补零的年号+月+日组合。要实现带前导零的格式,咱们需要抛弃预定义样式,改用自定义日期格式模式

修正后的代码

import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.JapaneseCalendar;
import java.util.Date;
import java.util.Locale;

public class JapaneseDateFormatter {
    public static void main(String[] args) throws Exception {
        // 解析输入的公历日期
        Date dtEngDate = new java.text.SimpleDateFormat("yyyy-MM-dd").parse("2019-05-01");
        
        // 直接使用ICU的SimpleDateFormat,指定日本日历和自定义格式
        SimpleDateFormat japaneseDateFormat = new SimpleDateFormat(
            "GyMMdd", 
            Locale.JAPAN,
            new JapaneseCalendar()
        );
        
        // 格式化并输出结果
        String formattedDate = japaneseDateFormat.format(dtEngDate);
        System.out.println("today is: " + formattedDate);
    }
}

关键细节解释

  • 自定义格式GyMMdd的作用
    • G:输出日本年号的缩写符号(令和对应R,平成对应H
    • y:输出年号的年份,ICU会自动补零为两位数字(令和1年就变成01
    • MM:强制输出两位月份(5月转为05
    • dd:强制输出两位日期(1号转为01
  • 相比之前用Calendar.getDateTimeFormat的方式,直接实例化SimpleDateFormat并传入JapaneseCalendar,能更精准地控制输出格式,完全避免预定义样式的局限性。
  • 现在也不需要再调用replaceAll("/", "")了,因为自定义模式不会生成任何分隔符。

运行结果

执行这段代码后,你会得到预期的输出:

today is: R010501

内容的提问来源于stack exchange,提问作者Amit Unakal

火山引擎 最新活动