Дарт: разбирать дату, часовой пояс дает UnimplementedError - PullRequest
1 голос
/ 17 мая 2019

Мне нужно проанализировать дату в следующем формате в моем приложении Флаттер (из 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 ]

2 голосов
/ 17 мая 2019
Шаблоны

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

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

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

1 голос
/ 17 мая 2019

Из документов DateFormat класса :

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

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

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

Примеры допустимых строк:

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