Как преобразовать определенный формат строки в DateTime в Flutter?

#flutter #dart

Вопрос:

У меня есть строка «11:59 вечера». Я хотел бы проанализировать его как сегодняшнюю дату и время.

 String time = '11:59 pm';
 

Я попробовал это: DateFormat('HH:mm').parse(time) и я получаю 1970-01-01 11:59:00.000 в качестве ответа, который, по моему мнению, является временем «я», а также неправильной датой.

Как получить его как сегодняшнюю дату и правильное время ввода am/pm? Спасибо

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

1. используйте функцию сейчас()

2. можете ли вы привести пример?

3. используйте a в своем формате даты, которые представляют собой маркер am/pm : DateFormat('HH:mm a').parse(time)

4. Unhandled Exception: FormatException: Trying to read a from 11:59 pm at position 6 Получена эта ошибка при изменении формата на «ЧЧ:мм а»

5. Действительно, он должен быть прописным, поэтому просто сделайте его прописным перед вызовом DateFormat : DateFormat('HH:mm a').parse(time.toUpperCase())

Ответ №1:

Используйте a в своем формате даты, который представляет собой маркер am/pm. См. документацию.

Обратите внимание, что это работает только в том случае, если маркер прописной, поэтому просто сделайте его прописным перед вызовом DateFormat :

 final String timeStr = '11:59 pm';
final formatter = DateFormat('m:s a');
final dateTimeFromStr = formatter.parse(timeStr.toUpperCase());
print(dateTimeFromStr);
 

Если вам нужно установить это время для текущей даты, одним из решений является использование DateTime конструктора и передача года/месяца/дня/часа из DateTime.now() :

 final String timeStr = '11:59 pm';
final formatter = DateFormat('m:s a');
final dateTimeFromStr = formatter.parse(timeStr.toUpperCase());
final DateTime now = new DateTime.now();
final DateTime date = new DateTime(now.year, now.month, now.day, now.hour, dateTimeFromStr.minute, dateTimeFromStr.second);
print(date);