#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)