Codename One — использование L10NManager вместо DateFormat (устарел) для получения формата даты и времени текущей локали

#java #locale #codenameone #date-format

#java #locale #codenameone #формат даты

Вопрос:

Мое приложение CodenameOne (порт iOS приложения для Android) показывает пользователю пример формата даты и времени в соответствии с локализацией.

Это Java-код в моем приложении для Android:

 static String getTheCurrentLocaleDateTimeFormatString() {
    return ((SimpleDateFormat) DateFormat.getDateTimeInstance()).toLocalizedPattern();
}
  

Например, в моей локали я получаю эту строку:

 dd MMM y HH:mm:ss
  

При этом невозможно внести никаких изменений в дизайн приложения.

Документация здесь :https://www.codenameone.com/javadoc/java/text/DateFormat.html

говорит, что DateFormat устарел и имеет проблемы на некоторых платформах, таких как сама iOS. Он используется только для этого, кстати, я оставил его в своем приложении для Android.

Однако я не могу использовать его методы, потому что они не совпадают в CodenameOne, если я не ошибаюсь.

В документации сказано использовать вместо этого L10NManager, но я должен изменить код.

Как правильно использовать L10NManager для достижения той же цели?

Ответ №1:

Вы можете использовать L10NManager следующим образом:

 String t = L10NManager.getInstance().formatDateTime(date);
  

Мы также поддерживаем SimpleDateFormat , но он немного более ограничен. У нас есть его версия в com.codename1.l10n , которая работает более согласованно на разных платформах.

Комментарии:

1. Извините, но мой вопрос касается строки формата. Приведенный в вопросе пример кода работает в Android и выдает строку типа «dd MMM y HH: mm: ss». Пользователь видит эту строку, в то время как ваш фрагмент кода выдает дату типа «14 назад 2020, 10: 42:26»

2. В классе L10N есть несколько других вариантов форматирования для коротких / длинных форматов. Они определяются операционной системой, поэтому по определению они будут несовместимыми. Если вам нужен согласованный формат, вы можете напрямую использовать SimpleDateFormat и включить шаблон для даты / времени.

3. Мне нужна просто строка формата (с буквами) даты и времени текущей локали. Он наверняка используется в SimpleDateFormat для получения даты, как в предоставленном вами примере с датой и временем, поэтому можно было бы добавить метод, такой как getCurrentLocaleDatetimeFormatString() . Возможно ли добавить этот метод? В противном случае есть ли способ получить строку формата (мне это нужно для порта iOS, а не для Android)?

4. У нас нет строки формата для iOS, поскольку она там не существует. L10NManager пропускает этап форматирования даты и выполняет форматирование за вас.

5. Итак, я предполагаю, что L10NManager знает все локали и выполняет некоторую обработку строк. Я вижу, что моя локаль соблюдается, потому что «14 назад 2020, 10: 42:26» является одним из подходящих форматов. Возможно ли вообще иметь строку формата, основанную на внутренней информации, которую хорошо использует L10NManager. Я думаю, что соответствие буквам (или специальным группам букв) является международным стандартом (см. Документацию Android или Apple)