我用这样的日期范围替换了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
两个问题:
答案 0 :(得分:1)
对附带问题的简单回答是:升级到Java 9或更高版本。
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);
2012年5月-2013年11月
Java从多达四个来源获取其语言环境数据(包括不同语言中使用的月份缩写)。直到Java 8(包括Java 8),默认值都是Java自己的,但至少在Java 8中,Unicode的通用语言环境数据存储库CLDR也随Java一起分发(不确定Java 7)。在Java 9中,CLDR数据是默认值,但Java本身可以作为COMPAT获得。系统属性java.locale.providers
控制要使用的语言环境数据。因此,我曾希望将此属性设置为CLDR
或CLDR,JRE
可以在Java 8上使用,但是在我的Java 8上却不能,似乎CLDR数据在两个Java版本中都不相同。>
在任何情况下,尽管Java自己的德语月份缩写不带点,但在CLDR中,Java 9中的德语月份缩写则带点。最多四个字母(Mai,Juni和Juli)的月份名称全写,不带点。
Java 8对以下问题的回答: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);
2012年5月– 2013年11月
Java 6和7回答了一个问题:获取ThreeTen Backport库并按照Java 8的方法进行操作(底部的链接)。
对于主要问题,我认为我听不懂。如果您想要的是“至”个月垂直排列,我认为您在docx文档中需要两列而不是一列。您可以指定在这两个特定的列之间不画垂直线,以便读者将其视为一个。
java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。