如何在dart中添加序列化程序将iso 8601转换为datetime对象?

问题描述 投票:2回答:2

在飞镖中我想这样做:

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

但它会抛出一个null。

Dart似乎无法解析iso 8601日期时间格式。我找到了一个名为“Iso8601DateTimeSerializer”的自定义序列化程序,但是如何将它添加到我的flutter应用程序中呢?

链接:https://reviewable.io/reviews/google/built_value.dart/429#-

这里的说明仅指示使用“SerializersBuilder.add”将其添加到飞镖中,但我是新手并且无法找到方法?

链接:https://pub.dartlang.org/documentation/built_value/latest/iso_8601_date_time_serializer/Iso8601DateTimeSerializer-class.html

dart flutter datetime-format iso8601
2个回答
4
投票

问题是Dart的DateTime.parse只接受最多六位小数秒,你的输入有7位。

......然后可选择'。'然后是一到六位数的第二部分。

您可以使用以下内容将您的输入消毒至六位数:

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

也许解析函数应该只接受更多数字,即使它们不影响该值。


1
投票

只是为了补充Irn的答案。您需要为正则表达式添加一些转义才能正常工作。

String restrictFractionalSeconds(String dateTime) =>
dateTime.replaceFirstMapped(RegExp("(\\.\\d{6})\\d+"), (m) => m[1]);
© www.soinside.com 2019 - 2024. All rights reserved.