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

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

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

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

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

dd MMM y HH:mm:ss

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

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

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

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

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

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


person P5music    schedule 13.08.2020    source источник


Ответы (1)


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

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

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

person Shai Almog    schedule 14.08.2020
comment
Извините, но мой вопрос касается строки формата. Приведенный пример кода в вопросе работает в Android и дает строку вида dd MMM y HH: mm: ss. Пользователь видит эту строку, в то время как ваш фрагмент кода дает дату, например, 14 назад 2020 г., 10:42:26. - person P5music; 14.08.2020
comment
Есть несколько других вариантов форматирования в классе L10N для коротких / длинных форматов. Они определяются ОС, поэтому по определению они будут несовместимы. Если вам нужен согласованный формат, вы можете напрямую использовать SimpleDateFormat и включить шаблон для даты / времени. - person Shai Almog; 15.08.2020
comment
Мне нужна только строка формата (с буквами) текущей даты и времени Locale. Он обязательно используется в SimpleDateFormat, чтобы получить дату, как в предоставленном вами примере даты и времени, чтобы можно было добавить метод, например getCurrentLocaleDatetimeFormatString (). Можно ли добавить этот метод? В противном случае есть способ получить строку формата (мне она нужна для порта iOS, а не Android)? - person P5music; 16.08.2020
comment
У нас нет строки формата для iOS, поскольку ее там нет. L10NManager пропускает этап форматирования даты и выполняет форматирование за вас. - person Shai Almog; 17.08.2020
comment
Итак, я предполагаю, что L10NManager знает все локали и выполняет некоторую обработку строк. Я вижу, что мой Локаль соблюдается, потому что 14 назад 2020 10:42:26 - один из подходящих форматов. Возможно ли вообще иметь строку формата на основе внутренней информации, которую L10NManager хорошо использует? Я считаю, что переписка буквами (или особыми группами букв) является международным стандартом (см. Документацию Android или Apple) - person P5music; 17.08.2020
comment
Нет, он ничего не знает. Он просто вызывает собственные методы ОС для форматирования даты, времени, числа и т. Д. Таким образом, он будет действовать полностью в каждой ОС, на которой он работает. JavaSE знала все обо всем, что делало его огромным. Android тоже сделал это, но это операционная система, так что это часть ее функций. Поскольку мы упаковываем JVM, нет смысла включать все эти накладные расходы. - person Shai Almog; 18.08.2020
comment
Я еще не глубоко изучал Codename. Я хотел бы знать, можно ли вызвать нативную функцию на iOS из кроссплатформенного проекта и как это сделать. Возможно, iOS предоставляет эту функцию для строк формата даты и времени, я должен это проверить. - person P5music; 18.08.2020
comment
Да, вы можете сделать это довольно легко. См. codenameone.com / - person Shai Almog; 19.08.2020