Даю современный ответ.
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.time, современный API даты и времени Java. 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
с подпакетами.
Ссылки
person
Ole V.V.
schedule
13.07.2019
DateFormat
было нормальным, когда этот вопрос задавали в 2011 году, этот класс и его подклассSimpleDateFormat
всегда были проблемными и теперь давно устарели. Я рекомендую вам не использовать их, а вместо этого изучить java.time, современную дату Java и time API. - person Ole V.V.   schedule 13.07.2019