印度的主要日期模式为DD-MM-YY
。
我正在尝试使用以下代码获取印度的默认日期格式。
Locale locale = new Locale("en", "IN");
java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance(
java.text.DateFormat.MEDIUM, locale);
String pattern = ((SimpleDateFormat)dateFormat).toPattern();
上面的pattern变量的值为“ d MMM, yyyy
”。但我想将日期格式设置为“ DD-MM-YY
”。
如何实现?
答案 0 :(得分:2)
解决您问题的方法是为en-IN
语言环境提供您自己的语言环境数据。一方面,它可能太多了,您可以寻找次优的解决方案;另一方面,如果重要的话,这是可行的。我没有看到提供的自定义日期格式数据,因此我不会假装可以向您提供详细信息。请查看LocaleServiceProvider
及其子类DateFormatProvider
的文档(底部链接)。
Locale loc = Locale.forLanguageTag("en-IN");
System.out.println(DateTimeFormatterBuilder.getLocalizedDateTimePattern(
FormatStyle.SHORT, null, IsoChronology.INSTANCE, loc));
Java 9上的输出:
dd / MM / yy
请注意,我使用的是FormatStyle.SHORT
,而不是MEDIUM
。无论如何,我相信这是解决您的问题的第一部分。
上面的输出不是那么远,只是在需要破折号/连字符的地方使用斜杠。您可能会考虑您的用户是否可以接受它。但是,其他Java版本上的结果可能会有所不同。
以java.locale.providers
开始的系统属性HOST
运行Java程序,将导致Java使用操作系统的日期格式仅用于默认语言环境。首先,您可以检查是否可以满足您的需求。其次,也许更重要的是,这允许用户通过配置操作系统来选择自己的日期格式。例如
java -Djava.locale.providers=HOST,CLDR,COMPAT YourApp
进一步了解LocaleServiceProvider
的文档。
在与以前相同的Java 9上,我获得的te-IN
(teluga)语言环境的输出是您要求的dd-MM-yy
。在许多情况下,用户选择的语言环境超出了控制范围,但是在某些情况下,选择此语言环境可以解决您的问题。
最后,如果您需要在多个语言环境中支持您的应用,并且您-或重要的是,您的用户-仅对en-IN
语言环境的日期格式不满意,那么您当然可以手动为仅此语言环境,并在获得此语言环境时对dd-MM-yy
进行硬编码。这不是一个漂亮的解决方案,但可以使用。
答案 1 :(得分:1)
使用此,
java.text.DateFormat dateFormat = new SimpleDateFormat("dd-MM-yy");
String pattern = dateFormat.toPattern();
在这里您需要设置所需的确切日期格式。现在,在您的代码中,其分配的默认格式为java.text.DateFormat.MEDIUM
答案 2 :(得分:0)
除了硬编码的"dd-MM-yy"
之外,您还可以使用SHORT格式代替MEDIUM:
java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance(
java.text.DateFormat.SHORT, locale);
更新的数据时间类的工作原理类似,值得切换。
答案 3 :(得分:0)
其他答案肯定会起作用。但是DateFormat/SimpleDateFormat
不是thread-safe(请参阅同步部分)。
建议改用DateTimeFormatter:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yy");
System.out.println("Formatted date: " + dateTimeFormatter.format(ZonedDateTime.now()));