Не совсем понятно, привязан ли локализованный формат даты к языку или к стране.Мне кажется, это чаще всего связано с языком или комбинацией обоих.Поэтому, когда вы запрашиваете краткий формат даты для локали без языка (только для страны), вы очень часто получаете y-MM-dd
, который является международным форматом короткой даты по умолчанию.
В моем Java 11 есть 6(шесть) доступных локалей для Соединенных Штатов, и они, как правило, предоставляют разные форматы коротких дат:
lkt_US
( Lakota , язык сиу) дает y-MM-dd
(по умолчанию во всем мире) es_US
(испанский) и haw_US
( гавайский ) дают d/M/yy
en_US_POSIX
, en_US
и chr_US
( Чероки ) дают M/d/yy
Поэтому я полагаю, что все вышеперечисленное будет правильным ответом для короткого формата даты в США.И я верю, что код в вашем собственном ответе даст вам один из них.Реальный вопрос в том, какой из них вы хотите.Или ваш пользователь.
java.time и ThreeTenABP
Теперь, когда я пишу ответ, хочу упомянуть, что DateFormat
и SimpleDateFormat
общеизвестно хлопотны и давно устарели.Вместо этого рассмотрите возможность использования DateTimeFormatter
и / или DateTimeFormatterBuilder
из java.time, современного Java-API даты и времени.
Locale usSpanish = Locale.forLanguageTag("es-US");
String dateFormatPattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
FormatStyle.SHORT, null, IsoChronology.INSTANCE, usSpanish);
System.out.println("Format pattern: " + dateFormatPattern);
Шаблон формата: M / d / yy
Я запустил этот фрагмент на Java 7, используя ThreeTen Backport, бэкпорт java.time.И шаблон формата отличается от того, который я получил в Java 11 выше.Java 7 использует встроенные данные локали Java, в то время как Java 11 использует CLDR, Unicode Common Locale Data Repository.Есть различия между ними.Я не знаю, что использует Android, но я верю, что это что-то разумное.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых иновые устройства Android.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от уровня API 26) современный API поставляется встроенным.
- В Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется версия ThreeTen для AndroidBackport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки