如何检索区域设置的日期格式

时间:2011-02-18 14:39:50

标签: java date locale date-format

我一直在使用DateFormat格式化日期,但现在我需要将语言环境的格式传递给jQuery Date小部件。我怎样才能获得格式?

更新

为了澄清,我需要在Java中获得模式,以便我可以将其输出到其他地方。例如在某些JavaScript中我可能想要创建一个这样的字符串,其中包含日期格式:

$('#datepicker').datepicker({'dateFormat':'dd/mm/yy'})

2 个答案:

答案 0 :(得分:4)

您可以使用

获取日期模式
((SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.UK)).toPattern()

或者如果您只需要日期

((SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK)).toPattern()

API:SimpleDateFormat.toPattern()DateFormat.getDateTimeInstance()DateFormat.getDateInstance()

第二个问题是如何将其转换为jQuery特定的格式模式。

Java date formatting。 vs jQuery DatePicker Date Formatting

  • java D中的一天,jQuery o
  • Java yy短暂的一年,jQuery y
  • Java yyyy,jQuery yy
  • Java M中没有前导零的月份,jQuery m
  • Java MM中带前导零的月份,jQuery mm
  • Java MMM中的月份名称简称,jQuery M
  • jQuery MM中Java MMMM中的月份名称长 -

答案 1 :(得分:1)

我最近一直在关注这个问题,并且没有找到一种使用标准库找到它的简单方法。我需要这个来本地化Wicket类org.apache.wicket.extensions.markup.html.form.DateTextField,它采用SimpleDateFormat模式而不是DateFormat对象。这是我最终决定使用的代码,它不依赖于JVM的实现细节,但必须解析DateFormat.format的输出特定日期(11/22/3333 - 美国格式)。 / p>

public static String simpleDateFormatForLocale(Locale locale) {
    TimeZone commonTimeZone = TimeZone.getTimeZone("UTC");
    Calendar c = Calendar.getInstance(commonTimeZone);
    c.set(3333, Calendar.NOVEMBER, 22);

    DateFormat localeDateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    localeDateFormat.setTimeZone(commonTimeZone);
    String dateText = localeDateFormat.format(c.getTime());

    return dateText.replace("11", "MM").replace("22", "dd").replace("3333", "yyyy").replace("33", "yyyy");
}

在我的情况下,我想强制使用yyyy,即使格式返回两位数年份。这就是我今年两次致电replace的原因。

以下是一些示例区域设置的输出:

en_US  11/22/33  MM/dd/yyyy
en_CA  22/11/33  dd/MM/yyyy
zh_CN  33-11-22  yyyy-MM-dd
de     22.11.33  dd.MM.yyyy
ja_JP  33/11/22  yyyy/MM/dd

如果有人可以改进,我很乐意看到他们的解决方案。