您的问题的镀金解决方案是提供您自己的语言环境数据en-IN
。一方面它可能太多,您可以寻找下一个最佳解决方案;另一方面,如果重要,它是可行的。我还没有看到提供的自定义日期格式数据,所以我不会假装我可以给你详细信息。请查看文档LocaleServiceProvider
及其子类DateFormatProvider
(底部的链接)。
获取区域设置的本地化格式模式字符串
Locale loc = Locale.forLanguageTag("en-IN");
System.out.println(DateTimeFormatterBuilder.getLocalizedDateTimePattern(
FormatStyle.SHORT, null, IsoChronology.INSTANCE, loc));
我的 Java 9 上的输出:
日/月/年
请注意,我使用的是FormatStyle.SHORT
,而不是MEDIUM
. 无论如何,我相信这是解决您的问题的第一部分。
可能的次佳解决方案
上面的输出并没有那么远,只是在你想要破折号/连字符的地方使用斜杠。您可以考虑您的用户是否可以接受它。但是,在其他 Java 版本上的结果可能会有所不同。
以系统属性java.locale.providers
开头的 Java 程序运行HOST
将导致 Java 将操作系统的日期格式仅用于默认语言环境。首先,您可以检查这是否给了您想要的东西。其次,也许更重要的是,这允许用户通过配置他们的操作系统来选择他们自己的日期格式。例如
java -Djava.locale.providers=HOST,CLDR,COMPAT YourApp
阅读更多的文档LocaleServiceProvider
。
在与以前相同的 Java 9 上,我为te-IN
(teluga) 语言环境得到的输出dd-MM-yy
就是您所要求的。在许多情况下,用户选择了无法控制的语言环境,但也可能存在选择此语言环境可以解决您的问题的情况。
最后,如果您需要在多个语言环境中支持您的应用程序,并且您(或者重要的是,您的用户)只对语言环境的日期格式不满意en-IN
,您当然可以只为该语言环境手动编写例外代码,并dd-MM-yy
在获得时进行硬编码这个语言环境。这不是一个漂亮的解决方案,但会奏效。
链接