Форматирование даты для разных локальных объектов с помощью SimpleDateFormat
Я видел, что этот вопрос задается в нескольких местах, но данные ответы мне не ясны. Вот почему я спрашиваю снова.
Можно ли получить конкретную дату локали, просто передав аргумент Locale с тем же шаблоном даты ? например, как я могу сделать что-то подобное
String pattern = "dd/MM/yyyy";
Date d1 = new Date();
SimpleDateFormat f1 = new SimpleDateFormat( pattern , Locale.UK );
f1.format(d1);
// formatted date should be in "dd/MM/yyyy" format
SimpleDateFormat f2 = new SimpleDateFormat( pattern , Locale.US );
f2.format(d1);
// formatted date should be in "MM/dd/yyyy" format
Приведенный выше код не дает мне ожидаемого результата. Есть ли способ сделать что-то подобное ?
Я попробовал использовать метод фабрики DateFormat. Проблема с этим заключается в том, что я не могу пройти шаблон формата. он имеет некоторые предопределенные форматы дат (короткие, средние и т. д.)
Заранее благодарю...
2 ответа:
Вы могли бы попробовать что-то вроде этого
@Test public void formatDate() { Date today = new Date(); SimpleDateFormat fourDigitsYearOnlyFormat = new SimpleDateFormat("yyyy"); FieldPosition yearPosition = new FieldPosition(DateFormat.YEAR_FIELD); DateFormat dateInstanceUK = DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK); StringBuffer sbUK = new StringBuffer(); dateInstanceUK.format(today, sbUK, yearPosition); sbUK.replace(yearPosition.getBeginIndex(), yearPosition.getEndIndex(), fourDigitsYearOnlyFormat.format(today)); System.out.println(sbUK.toString()); DateFormat dateInstanceUS = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US); StringBuffer sbUS = new StringBuffer(); dateInstanceUS.format(today, sbUS, yearPosition); sbUS.replace(yearPosition.getBeginIndex(), yearPosition.getEndIndex(), fourDigitsYearOnlyFormat.format(today)); System.out.println(sbUS.toString()); }
Он в основном форматирует дату, используя стиль DateFormat#SHORT и улавливает местоположение года, используя объект FieldPosition. После этого вы заменяете год его четырьмя цифрами formart.
Вывод:
13/11/2013 11/13/2013
EDIT
Использовать с любым шаблоном
StringBuffer sb = new StringBuffer(); DateFormat dateInstance = new SimpleDateFormat("yy-MM-dd"); System.out.println(dateInstance.format(today)); dateInstance.format(today, sb, yearPosition); sb.replace(yearPosition.getBeginIndex(), yearPosition.getEndIndex(), fourDigitsYearOnlyFormat.format(today)); System.out.println(sb.toString());
Вывод:
13-11-13 2013-11-13
Попробуйте использовать это :
DateFormat.getDateInstance(int style, Locale locale)
Java doc для SimpleDataFormat гласит следующее:
Создает SimpleDateFormat , используя заданный шаблон и значение по умолчанию символы формата даты для данной локали. Примечание: этот конструктор может не поддерживает все локали . Для полного охвата используйте заводские методы в класс DateFormat.