【发布时间】:2017-06-09 19:50:15
【问题描述】:
我有一个多元文化的应用程序,该项目使用 Java 7。我需要显示日期,但只显示月份和月份中的日期。例如,在Locale.UK 中,今天的日期看起来像:24/01,但在 Locale.US 中像:1/24。如何在 Java 7 中实现这一点?我尝试使用DateFormat.getDateInstance(dateFormat, locale),但在这种情况下,我可以只使用预定义的日期格式,例如DateFormat.SHORT、DateFormat.DEFAULT 等。没有预定义的格式只有月份和月份中的日期。接下来我尝试将 SimpleDateFormat 与语言环境一起使用,但这并不像我想的那样工作,它只是根据语言环境翻译一些文本。这是我的示例代码:
DateFormat dfuk = DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK);
DateFormat dfus = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
System.out.println(dfuk.format(new Date())); // 24/01/17
System.out.println(dfus.format(new Date())); // 1/24/17
SimpleDateFormat sdfuk = new SimpleDateFormat("dd/MM", Locale.UK);
SimpleDateFormat sdfus = new SimpleDateFormat("dd/MM", Locale.US);
System.out.println(sdfuk.format(new Date())); // 24/01
System.out.println(sdfus.format(new Date())); // 24/01
我希望最后一行打印 01/24(或 1/24)。如何做到这一点?
【问题讨论】:
-
关于
sdfus的倒数第三行说的是SimpleDateFormat sdfus = new SimpleDateFormat("dd/MM", Locale.US);-- 你的意思是说MM/dd吗? -
是的,可以,但如果你说我必须编写额外的条件来验证实际的语言环境,并选择适当的格式(dd/MM 或 MM/dd)我希望找到构建的 Java 库-解决我的问题。
-
getDateInstance()方法接受style的参数。最短的样式似乎是DateFormat.SHORT。您可以争辩说,也许他们应该提供一个更短的(DateFormat.SHORTER也许?)c.f. docs.oracle.com/javase/6/docs/api/java/text/… -
我的库 Time4J 提供了 net.time4j.xml.AnnualDate 类,支持大约 80 种语言环境中的四种格式样式。版本行 v3.x 可以在 Java-6 或 7 上运行,较新的版本 v4.x 可以在 Java-8 上运行。如果您仍然错过任何语言环境,那么只需在 Time4J 的跟踪器上打开一个问题。当前的 i18n-data 基于 unicode-cldr-version v30。