如何使用ERA设置日语的英语日期格式

时间:2019-04-29 11:55:22

标签: java simpledateformat cjk

我希望新的日语ERA日期为“ R010501”,而我得到的却是“ R151”。

我正在使用com.ibm.icu.text.DateFormat包来获取日期格式


Date dtEngDate = new SimpleDateFormat("yyyy-MM-dd").parse("2019-05-01");

com.ibm.icu.util.Calendar japaneseCalendar = new com.ibm.icu.util.JapaneseCalendar();

        com.ibm.icu.text.DateFormat japaneseDateFormat = japaneseCalendar.getDateTimeFormat(
                 com.ibm.icu.text.DateFormat.SHORT, -1, Locale.JAPAN);      

        String today = japaneseDateFormat.format(dtEngDate);
System.out.println("today is:" +today.replaceAll("/", ""));

输出:今天是-> R151。 预期输出:今天是-> R010501

2 个答案:

答案 0 :(得分:1)

除了我以外,我不知道您到底做了什么,但我只是从http://www.java2s.com/Code/Jar/c/Downloadcomibmicu442jar.htm下载了com.ibm.icu库,基本上复制了您的代码。

import com.ibm.icu.text.DateFormat;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.JapaneseCalendar;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {

    public static void main(String[] args) throws ParseException {
        Date dtEngDate = new SimpleDateFormat("yyyy-MM-dd").parse("2019-05-01");
        Calendar japaneseCalendar = new JapaneseCalendar();
        DateFormat japaneseDateFormat = japaneseCalendar.getDateTimeFormat(DateFormat.SHORT, -1, Locale.JAPAN);
        String today = japaneseDateFormat.format(dtEngDate);
        System.out.println("today is: " + today.replaceAll("/", ""));
    }

}

我得到today is: 平成310501作为控制台输出,我想这就是您想要的。所以我想您的com.ibm.icu-4.4.2.jar出了问题。

也许可以考虑尝试从我使用的链接中下载最新版本,并将其添加到模块/项目依赖项中。

答案 1 :(得分:1)

java.time.chrono.JapaneseDate

日语日历不需要外部依赖项。它是内置的JapaneseDate类。

当心::只有Java的最新版本才知道新的Reiwa era

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("GGGGGyyMMdd", Locale.JAPANESE);
    LocalDate isoDate = LocalDate.parse("2019-05-01");
    JapaneseDate japaneseDate = JapaneseDate.from(isoDate);
    System.out.println(japaneseDate.format(dateFormatter));

在Java 11.0.3上,此代码段的输出为:

  

R010501

五个模式字母G给出了这个时代的狭窄形式,只有一个字母(此处为R代表Reiwa)。

在Java 9.0.4上,我得到了H310501。因此,如果您能够升级Java,似乎可以正常使用。 Meno Hochschild在评论中报告说,他在Java 8u212上获得了正确的结果,因此,如果仅在主版本中拥有最新的次要升级,则可能不需要升级到新的主版本。我不知道是否有办法只升级旧版Java中的日历数据,这可能是另一回事了。

顺便说一句,不要使用SimpleDateFormatDate。这些类的设计很差(特别是前者非常麻烦),而且早已过时。使用java.time,现代的Java日期和时间API。感觉好多了。

链接: Oracle Tutorial: Date Time解释了java.time的用法。