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

标签 dart flutter datetime-format iso8601

在 Dart 中我想这样做:

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

但它会抛出一个空值。

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

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

此处的说明仅指示使用“SerializersBuilder.add”将其添加到 dart,但我是新手,不知道如何操作?

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

最佳答案

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

... and then optionally a '.' followed by a one-to-six digit second fraction.

您可以使用以下方法将您的输入清理到六位数:

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

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

关于dart - 如何在 dart 中添加序列化程序以将 iso 8601 转换为 datetime 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53440796/

相关文章:

file - Dart 和客户端文件处理(授权)

dart - 测试文本小部件中的子字符串

android - 如何修改 Riverpod 中另一个提供者的 StateNotifier 提供者的状态?

java - 如何从 flutter 中正确调用 android native 代码(包括 android/IOS)?

葡萄牙语的 C# 日期时间格式

java - 无法在 Java 8 中使用 DateTimeFormatter 和 ZonedDateTime 从 TemporalAccessor 获取 ZonedDateTime

dart - Flutter ListView限制滚动

Dart build runner 生成一个包含内容的 dart 文件

Flutter:无需请求即可将数据从后端发送到前端

java - Zulu 和 Offset 的日期时间格式