Если вы используете Joda Time (а почему бы и нет, если у вас есть какой-либо выбор? Он почти включен в JDK 1.7), вы можете сделать что-то вроде этого:
String patternForStyleAndLocale = org.joda.time.format.DateTimeFormat.patternForStyle("S-", locale);
Что, к сожалению, толькодает двузначный год.Один из способов обойти это:
if (!org.apache.commons.lang.StringUtils.contains(patternForStyleAndLocale, "yyyy"))
{
// The default Joda pattern only has a two digit year for US and Europe, China etc - but we want four digit years
patternForStyleAndLocale = StringUtils.replace(patternForStyleAndLocale, "yy", "yyyy");
}
И вы можете рассмотреть их кэширование в ConcurrentHashMap<Locale, String>
.
Приятная вещь в получении числовой даты в виде предварительно локализованного шаблона, напримерэто то, что он не требует дальнейшей локализации позже, как если бы вы использовали шаблон, такой как:
"dd MMM yyyy" // UK: "25 Dec 2010" FRANCE: "25 déc. 2010" etc..
Однако ... Я только что заметил из вашегопозже прокомментируйте, что вы хотите передать шаблон в JavaScript - это может быть очень сложно, поскольку JS использует другое форматирование шаблонов для Java (например, дата ISO - "yyyy-MM-dd"
в Java и "yy-mm-dd"
в JS).Я не пытался решить эту проблему, но я бы, вероятно, использовал некоторое отображение строк в JS или Java, чтобы просто отобразить шаблоны Java в JS.Разумеется, вам необходимо заранее знать каждый из шаблонов, с которыми вы можете столкнуться для каждого из языков.