java DateFormat-获取印度的默认日期格式为DD-MM-YY

时间:2019-07-11 10:21:56

标签: java simpledateformat

印度的主要日期模式为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”。 如何实现?

4 个答案:

答案 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()));