Dart:解析日期时区给出 UnimplementedError

Yan*_*n39 4 timezone date date-formatting dart flutter

我需要在我的Flutter应用程序(来自 JSON)中解析以下格式的日期

2019-05-17T15:03:22.472+0000

根据文档,我必须使用Z来获取时区(RFC 822 格式的最后 5 个字符),所以我使用以下内容:

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

但它失败并出现错误:

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());
}
Run Code Online (Sandbox Code Playgroud)

Z执行?

Nut*_*uts 10

可悲的是zv模式没有实现。

在 Dart DateTime 具有时区信息之前,不会实施这些

有关此问题的更多信息https://github.com/dart-lang/intl/issues/19

  • 谢谢(你的)信息。很遗憾它自 2015 年以来一直没有修复,文档中没有任何提及。 (5认同)

Mat*_*int 2

来自DateFormat课程文档

DateFormat 用于以区域设置敏感的方式格式化和解析日期。

您不要求解析区域设置敏感的日期字符串,而是要求解析ISO 8601日期字符串,因此您不应该使用该类DateFormat

相反,请使用DateTime.parsemethod,它支持您所描述的格式,根据其文档:

可接受的字符串示例:

  • ...
  • “2002-02-27T14:00:00-0500”:与“2002-02-27T19:00:00Z”相同