Post content
🤖Форматируйте дату и время на основе настроек пользователя В большинстве приложений приходится выводить время и дату, но в каком формате сделать это правильнее всего? Логично использовать формат, который применяется для локали пользователя, но в настройках системы пользователь может указывать формат времени и даты для отображения, а значит, ему хотелось бы видеть такой формат везде. Используйте класс android.text.format.DateFormat (ВАЖНО не путать с одноименным классом из пакета java.text) // Получаем текущую дату и время val currentDate: Date = ... // Получаем форматтер для даты, который учитывает региональные настройки пользователя val dateFormatter: java.text.DateFormat = android.text.format.DateFormat.getDateFormat(context) // Форматируем дату val formattedDate = dateFormatter.format(currentDate) // Получаем форматтер для времени, который учитывает настройку 12/24-часового формата val timeFormatter = android.text.format.DateFormat.getTimeFormat(context) // Форматируем время val formattedTime = timeFormatter.format(currentDate) // Получение порядка дня, месяца, года, который определил пользователь // Например ['d', 'M', 'y'] val char[] = android.text.format.DateFormat.getDateFormatOrder(context) val is24Hour = android.text.format.DateFormat.is24HourFormat(context) // Выбираем шаблон форматирования времени val pattern = if (is24Hour) "HH:mm" else "hh:mm a" // Форматируем время согласно выбранному шаблону val formattedTime = DateFormat.format(pattern, currentDate) Такой подход позволяет пользователю работать со временем в привычном формате в вашем приложении, а вам не задумываться какой шаблон времени использовать для форматирования. Если вы не хотите работать со старым Date API, которое есть с самых первый версий Java, то можно получить шаблон для форматирования времени на основе настроек пользователя с помощью android.text.format.DateFormat.getBestDateTimePattern() // Получаем шаблон форматирования для времени. В данном случае шаблон "hm" используется для получения // подходящего шаблона, который учитывает настройки пользователя (12/24-часовой формат). val locale = Locale.getDefault() val pattern: String = android.text.format.DateFormat.getBestDateTimePattern(locale, "hm") // Создаем DateTimeFormatter из Java 9 Date Time API val dateTimeFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern(pattern, locale) // Пример форматирования текущего времени с использованием DateTimeFormatter val formattedTime: String = LocalTime.now().format(dateTimeFormatter) println("Отформатированное время: $formattedTime") #android#лучшиепрактики