#flutter #dart #locale
Вопрос:
Согласно документам для пакета dart intl, DateFormat.jm()
он предназначен для форматирования времени как AM и PM и DateFormat.Hm()
предназначен для использования 24-часового формата:
DateFormat.jm() -> 5:08 ВЕЧЕРА>
DateFormat.Hm() -> 17:08 // принудительное 24-часовое время
Однако после настройки Intl для использования языкового стандарта пользователя путем вызова await findSystemLocale()
я не вижу никакой разницы между этими двумя:
import 'package:intl/intl.dart';
import 'package:intl/intl_standalone.dart';
...
await findSystemLocale(); // <-- running this causes the problem
final now = DateTime.now();
print("${Intl.defaultLocale} ${DateFormat.jm().format(now)} ${DateFormat.Hm().format(now)}");
Дает мне:
en_GB 16:45 16:45
Если я опущу await findSystemLocale();
, я получу ожидаемый результат, но в языковом стандарте по умолчанию:
en_US 5:51 ВЕЧЕРА 17:51
Это ошибка или я неправильно понимаю документы?
Я использую intl v0.16.1.
Комментарии:
1. Я подал сообщение об ошибке здесь: github.com/dart-lang/intl/issues/421
Ответ №1:
Хм… в моем случае у меня результат ниже.
flutter 1.22.5
intl 0.16.1
en_US 4:45 PM 16:45
Если это так, как насчет того, чтобы использовать пользовательский формат, как показано ниже?
DateFormat('h:mm a').format(now)
Комментарии:
1. Спасибо, что проверил меня на вменяемость. Я думаю, что понял, что происходит не так: когда мое приложение запускается, я устанавливаю языковой стандарт в соответствии с языковым стандартом устройства
findSystemLocale()
. Похоже, что запускfindSystemLocale()
функции вызывает проблему. Я обновил свой вопрос. Это похоже на ошибку?