Это нельзя сделать намного проще.Два предложения по упрощению:
- Используйте java.time, современный Java-интерфейс даты и времени.В этом случае мы заменяем два старых класса
Calendar
и Date
только одним новым классом LocalDate
.Так что это спасает нас от конверсии.Кроме того, используемые вами классы давно устарели, и, как правило, с java.time работать гораздо приятнее. - Используйте встроенный локализованный формат даты для локали пользователя, а не для записи строки шаблона формата.Последний, как правило, подвержен ошибкам, и использование встроенного формата намного лучше подходит для интернационализации.
Приведенный ниже код не тестируется, возможно, есть опечатка или два, но вы должны получитьИдея.
val date = LocalDate.now(ZoneId.of("Africa/Abidjan"))
val currentYear = date.year
val currentMonth = date.monthValue
val currentDay = date.dayOfMonth
val dateFormatter = DateTimeFormatter.ofLocalizedDate(TextStyle.MEDIUM)
pickDate.setOnClickListener {
val datePickDialog = DatePickerDialog(
activity,
DatePickerDialog.OnDateSetListener { view, year, month, dayOfMonth ->
val selectedDate = LocalDate.of(year, month + 1, dayOfMonth)
val dateString = selectedDate.format(dateFormatter)
currentDateView.text = dateString
},
currentYear,
currentMonth - 1,
currentDay
)
datePickDialog.show()
}
Укажите желаемый часовой пояс, в который я поместил Африку / Абиджан.Используйте ZoneId.systemDefault
для часового пояса по умолчанию (это то, что использовал код в вашем вопросе).Я также вынул форматтер из прослушивателя событий.Нет необходимости каждый раз создавать новый форматер.
Вопрос: Могу ли я использовать java.time на Android?Я в проекте использую мин API 21
Да, 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
с подпакетами.
Ссылки