我正在用这样的日期范围替换Word模板中的占位符
//...getting from and to dates
String format = "%1$-3tb %1$tY - %2$-3tb %2$tY";
dateString = String.format(format, from, to);
//...retrieving the Text object...
textElement.setValue(dateString);
控制台输出看起来不错:
Nov 2016 - Nov 2016
Jan 2016 - Jan 2016
Jul 2012 - Mär 2005
两个问题:
侧面问题的简单答案是:升级到Java9或更高版本。
YearMonth from = YearMonth.of(2012, Month.MAY);
YearMonth to = YearMonth.of(2013, Month.NOVEMBER);
String format = "%1$-3tb %1$tY - %2$-3tb %2$tY";
String dateString = String.format(Locale.GERMAN, format, from, to);
System.out.println(dateString);
Mai 2012-2013年11月
Java从最多四个来源获取其语言环境数据——包括不同语言中使用的月份缩写。在Java8之前和之前,默认是Java自己的,但至少在Java8 Unicode的公共语言环境数据存储库,CLDR,也与Java一起分发(不确定Java7)。从Java9开始,CLDR数据是默认的,但Java自己的数据可以作为COMPAT使用。系统属性java. locale.提供者
控制使用哪些语言环境数据。所以我期望将此属性设置为CLDR
或CLDR,JRE
将在Java8上工作,但在我的Java8上它没有,似乎CLDR数据在两个Java版本中不一样。
无论如何,虽然爪哇自己的德语月份缩写没有点,但在CLDRJava9中的德语月份缩写是有点的。最多四个字母(Mai、Juni和Juli)的月份名称是完整的,没有点。
Java8对附带问题的回答:java. time,现代Java日期和时间API允许我们定义自己的文本。例如:
Map<Long, String> monthTexts = new HashMap<>(16);
monthTexts.put(1L, "Jan.");
monthTexts.put(2L, "Feb.");
monthTexts.put(3L, "Mär.");
monthTexts.put(4L, "Apr.");
monthTexts.put(5L, "Mai");
monthTexts.put(6L, "Jun.");
monthTexts.put(7L, "Jul.");
monthTexts.put(8L, "Aug.");
monthTexts.put(9L, "Sep.");
monthTexts.put(10L, "Okt");
monthTexts.put(11L, "Nov.");
monthTexts.put(12L, "Dez.");
DateTimeFormatter monthFormatter = new DateTimeFormatterBuilder()
.appendText(ChronoField.MONTH_OF_YEAR, monthTexts)
.appendPattern(" u")
.toFormatter();
String dateString = from.format(monthFormatter) + " – " + to.format(monthFormatter);
System.out.println(dateString);
Mai 2012-2013年11月
Java6和7对附带问题的回答:获取三个反向库,按照Java8(底部链接)进行操作。
对于主要问题,我不认为我理解它。如果你想要的是“to”月份垂直排列,我认为你需要在docx文档中使用两列而不是一列。您可以指定在这两列之间不绘制垂直线,以便读者将其视为一列。
java. time
。首次描述了java. time
。java. time
反向移植到Java6和7(三个用于JSR-310)。