DateFormat.jm() выводит то же самое, что DateFormat.Hm(), это ошибка?

#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() функции вызывает проблему. Я обновил свой вопрос. Это похоже на ошибку?

Ответ №2:

Попробуйте вот это

 final now = DateTime.now();
  var time = DateFormat.jm().format(now);
  print(time);
 

введите описание изображения здесь

 final now = DateTime.now();
  var time = DateFormat.Hm().format(now);
  print(time);
 

введите описание изображения здесь