Я даю современный ответ.
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
подпакетов.
связи
DateFormat
класса было нормальным, когда этот вопрос был задан в 2011 году, этот класс и его подклассSimpleDateFormat
всегда были хлопотными и теперь уже давно устарели. Я рекомендую вам не использовать их и вместо этого заглянуть в java.time, современный Java-интерфейс даты и времени .