Форматирование даты и времени в зависимости от локали

Код, который должен быть выполнен для обеих альтернатив, настолько похож, что вы не можете точно предсказать результат. Структура базового объекта может отличаться, но это не проблема для оптимизатора точек доступа.

Объединение двух экземпляров фильтра создает больше объектов и, следовательно, больше делегирует код, но это может измениться, если вы используете ссылки на методы, а не на какие-либо различия. чем лямбда-выражения, например замените filter(x -> x.isCool()) на filter(ItemType::isCool). Таким образом, вы устранили синтетический метод делегирования, созданный для выражения лямбды. Таким образом, объединение двух фильтров с использованием двух ссылок на методы может создать один и тот же или меньший код делегирования, чем один вызов filter, используя выражение лямбда с &&.

Но, как сказано, этот вид накладных расходов будет исключается оптимизатором HotSpot и незначительно.

Теоретически два фильтра могут быть проще распараллеливаться, чем один фильтр, но это относится только к довольно вычислительным интенсивным задачам.

Таким образом, нет простой ответ.

Суть в том, что не стоит думать о таких различиях производительности ниже порога обнаружения запаха. Используйте то, что более читаемо.


¹ ... и потребуется реализация, выполняющая параллельную обработку последующих этапов, путь, который в настоящее время не выполняется стандартной реализацией потока

28
задан ereOn 20 February 2011 в 18:15
поделиться

1 ответ

Используйте getBestDateTimePattern()

DateFormat.getBestDateTimePattern() от android.text.format, пакет создает самую лучшую дату и время согласно локали, установленной пользователем.

, Например: скелет EEEE, MMM d, YYYY, jj:mm возвраты локализовал дату и время следующим образом.

Locale English (India):            Monday 9 Sep 2019, 9:33 PM
Locale English (United States):    Monday, Sep 9, 2019, 9:33 PM
Locale español (Estados Unidos):   lunes, 9 de sep. de 2019 9:33 PM
Locale español (México):           lunes, 9 de sep de 2019 21:33
Locale français (France):          lundi 9 sept. 2019 à 21:33
Locale português (Brasil):         segunda-feira, 9 de set de 2019 21:33

и так далее для различных локалей. Это также уважает 12-часовой или 24-часовой формат времени локали.

Для настройки Вашего собственного скелета относятся к [1 111] шаблон № 35 UTS на unicode.org.

Пример кода

Здесь является протестированным примером кода в Kotlin:

val skeleton = DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE, MMM d, YYYY, jj:mm")
val formatter = SimpleDateFormat(skeleton, Locale.getDefault()).apply {
    timeZone = TimeZone.getDefault()
    applyLocalizedPattern(skeleton)
}
val dateTimeText = formatter.format(calendar.time)
Log.d("YourClass", "Locale ${Locale.getDefault().displayName}: $dateTimeText")

Вместо Calendar класс, можно также использовать ZonedDateTime. Просто преобразуйте его в Date объект и дайте его format(). Например: Date(zonedDateTime.toInstant().toEpochMilli())

Hope, которая помогает.

0
ответ дан 27 November 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: