Как добавить сериализатор в dart для преобразования iso 8601 в объект datetime? - PullRequest
0 голосов
/ 23 ноября 2018

В дротике я хочу сделать это:

var s = "2018-11-23T04:25:41.9241411Z";  // string comes from a json but represented here for simplicity like this
var d = DateTime.parse(s);

, но он выбрасывает ноль.

Дарт не может анализировать форматы даты и времени iso 8601.Я нашел собственный сериализатор под названием «Iso8601DateTimeSerializer», но как мне добавить его в мое приложение флаттера?

ссылки: https://reviewable.io/reviews/google/built_value.dart/429#-

В инструкциях здесь указано только добавление его в dart с помощью "SerializersBuilder.add "но я новичок и не могу узнать, как?

ссылка: https://pub.dartlang.org/documentation/built_value/latest/iso_8601_date_time_serializer/Iso8601DateTimeSerializer-class.html

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Просто чтобы добавить к ответу Ирн.Вам нужно добавить некоторые экранированные выражения, чтобы регулярное выражение работало правильно.

String restrictFractionalSeconds(String dateTime) =>
dateTime.replaceFirstMapped(RegExp("(\\.\\d{6})\\d+"), (m) => m[1]);
0 голосов
/ 23 ноября 2018

Проблема в том, что DateTime.parse Дартс принимает только до шести цифр дробных секунд, а ваш ввод имеет семь.

... и затем при желании«.с последующим дробным разделением от одной до шести цифр.

Вы можете дезинфицировать ваш ввод до шести цифр, используя что-то вроде:

String restrictFractionalSeconds(String dateTime) =>
    dateTime.replaceFirstMapped(RegExp(r"(\.\d{6})\d+"), (m) => m[1]);

Возможно, функция разбора должна просто принятьбольше цифр, даже если они не влияют на значение.

...