Как найти DateFormat
для заданного Locale
?
Формат даты Java для локали
Ответ 1
DateFormat.getDateInstance(int,Locale)
Например:
import static java.text.DateFormat.*;
DateFormat f = getDateInstance(SHORT, Locale.ENGLISH);
Затем вы можете использовать этот объект для форматирования Date
s:
String d = f.format(new Date());
Если вы действительно хотите узнать базовый шаблон (например, yyyy-MMM-dd
), то, как вы получите объект SimpleDateFormat
назад:
SimpleDateFormat sf = (SimpleDateFormat) f;
String p1 = sf.toPattern();
String p2 = sf.toLocalizedPattern();
Ответ 2
TL;DR
DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH );
java.time
Исходные классы даты и времени теперь являются устаревшими и были вытеснены классами java.time.
DateTimeFormatter
имеет простой способ локализовать автоматически Locale
при создании строки для представления значения даты и времени. Укажите FormatStyle
, чтобы указать длину вывода (сокращенно или нет).
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL );
f = f.withLocale( Locale.CANADA_FRENCH );
Получить текущий момент. Обратите внимание, что Locale
и часовой пояс не имеют никакого отношения друг к другу. Один определяет представление, другой настраивается на конкретное время настенных часов. Таким образом, вы можете иметь часовой пояс в Новой Зеландии с японским языком Locale
или в этом случае часовым поясом в Индии с презентацией, отформатированной для человека Québécois для чтения.
ZoneId z = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = ZonedDateTime.now( z );
Сгенерируйте строку, используя этот локализующий объект форматирования.
String output = zdt.format( f );
О java.time
Структура java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь режим обслуживания, советуем перейти на классы java.time.
Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация JSR 310.
Где получить классы java.time?
- Java SE 8, Java SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональных возможностей java.time обратно переносится на Java 6 и 7 в ThreeTen-Backport.
- Android
- Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
- См. Как использовать ThreeTenABP....
Проект ThreeTen-Extra расширяет java.time с помощью дополнительных классов. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.
Ответ 3
Есть ли другой способ (без использования SimpleDateFormat cast) для получения шаблона по умолчанию для данного объекта Locale?