我希望新的日语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
我不知道除了我以外你做了什么,但我刚刚从com.ibm.icu
下载了http://www.java2s.com/Code/Jar/c/Downloadcomibmicu442jar.htm库,基本上复制了你的代码。
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
有问题。
也许考虑重新从我使用的链接下载最新版本并将其添加到模块/项目依赖项中。
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
给出了时代的狭隘形式,只有一个字母(这里为Reiwa的R
)。
在Java 9.0.4上我得到了H310501
。因此,如果您能够升级Java,它似乎将正常工作。 Meno Hochschild在评论中报告说他在Java 8u212上获得了正确的结果,所以如果你在主要版本中获得了最新的小升级,你可能不需要升级到新的主要版本。我不知道是否有办法只升级旧版Java中的日历数据,这可能是另一件需要调查的事情。
BTW不要使用SimpleDateFormat
和Date
。这些课程的设计很差(前者特别是出了名的麻烦)并且已经过时了。使用java.time,现代Java日期和时间API。使用起来好多了。
链接:Oracle Tutorial: Date Time解释java.time的用法。