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