Я даю современный ответ.
java.time и ThreeTenABP
Чтобы получить текущую дату:
LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));
Это дает вам объект LocalDate
, который вы должны использовать для хранения даты в вашей программе. LocalDate
- это дата без времени суток.
Только когда вам нужно отобразить дату для пользователя, отформатируйте ее в строку, соответствующую локали пользователя:
DateTimeFormatter userFormatter
= DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
System.out.println(today.format(userFormatter));
Когда я запускал этот фрагмент сегодня в английской локали США, вывод был:
13 июля 2019
Если вы хотите, чтобы оно было короче, укажите FormatStyle.MEDIUM
или даже FormatStyle.SHORT
. DateTimeFormatter.ofLocalizedDate
использует локаль форматирования по умолчанию, поэтому дело в том, что она выдаст выходные данные, подходящие для этой локали, отличающиеся для разных локалей.
Если ваш пользователь предъявляет особые требования к формату вывода, используйте строку шаблона формата:
DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
"d-MMM-u", Locale.forLanguageTag("ar-AE"));
13-يول -2019
Я использую и рекомендую современный Java-API даты и времени java.time. DateFormat
, SimpleDateFormat
, Date
и Calendar
, используемые в вопросе и / или во многих других ответах, плохо разработаны и давно устарели. А с java.time работать намного приятнее.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) встроен современный API.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На более старых версиях Android используется Android-версия ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки