0

印度的主要日期模式是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();

上面的模式变量的值为“ d MMM, yyyy”。但我想将日期模式设为“ DD-MM-YY”。如何做到这一点?

4

4 回答 4

2

您的问题的镀金解决方案是提供您自己的语言环境数据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在获得时进行硬编码这个语言环境。这不是一个漂亮的解决方案,但会奏效。

链接

于 2019-07-11T19:11:14.530 回答
1

用这个,

java.text.DateFormat dateFormat = new SimpleDateFormat("dd-MM-yy");
String pattern = dateFormat.toPattern();

在这里,您需要设置您想要的确切日期格式。现在在您的代码中,其分配的默认格式java.text.DateFormat.MEDIUMd MMM, yyyy

于 2019-07-11T10:28:26.650 回答
0

除了硬编码之外,"dd-MM-yy"您还可以使用 SHORT 格式而不是 MEDIUM:

java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance(
                        java.text.DateFormat.SHORT, locale);

较新的数据时间类的工作方式类似,值得切换。

于 2019-07-11T10:49:45.067 回答
0

其他答案肯定会奏效。但DateFormat/SimpleDateFormat不是线程安全的(请参阅同步部分)。

建议改用DateTimeFormatter

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yy");
    System.out.println("Formatted date: " + dateTimeFormatter.format(ZonedDateTime.now()));
于 2019-07-11T11:06:58.687 回答