Дарт: разбирать дату, часовой пояс дает UnimplementedError

Мне нужно проанализировать дату в следующем формате в моем приложении Flutter (из JSON):

2019-05-17T15: 03: 22,472 + 0000

Согласно документации , я должен использовать Z чтобы получить часовой пояс (последние 5 символов в формате RFC 822), поэтому я использую следующее:

new DateFormat("y-M-d'T'H:m:s.SZ").parseStrict(json['startDate']);

Но это не с ошибкой:

FormatException: символы, оставшиеся после анализа даты в 2019-05-17T15: 03: 22.472 + 0000

Вот еще один тест:

/// THIS WORKS
try {
    print(new DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(DateTime.now()));
} catch (e) {
    print(e.toString());
}

/// THIS RETURNS `UnimplementedError` (as soon as I use a 'Z' or 'z') somewhere
try {
    print(new DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(DateTime.now()));
} catch (e) {
    print(e.toString());
}

Z реализован?

Всего 2 ответа


Из DateFormat класса DateFormat :

DateFormat предназначен для форматирования и разбора дат с учетом языка.

Вы не просите проанализировать строку даты, чувствительную к локали, а скорее строку даты ISO 8601 , поэтому вам не следует использовать класс DateFormat .

Вместо этого используйте метод DateTime.parse , который поддерживает формат, который вы описали, для его документов:

Примеры принятых строк:

  • ...
  • «2002-02-27T14: 00: 00-0500»: то же, что «2002-02-27T19: 00: 00Z»

К сожалению, шаблоны z и v не реализованы.

Они не будут реализованы, пока у Dart DateTime нет информации о часовом поясе.

Больше информации по этому вопросу https://github.com/dart-lang/intl/issues/19


Есть идеи?

10000