用 dart 解析日期

Posted

技术标签:

【中文标题】用 dart 解析日期【英文标题】:Parsing dates with dart 【发布时间】:2014-10-04 20:04:10 【问题描述】:

我需要在 Dart 的 DateTime 对象中解析这种日期“星期一,2014 年 8 月 11 日下午 12:53 PDT”。

DateTime 有一个静态方法 parse,它接受 ISO 8601 格式的子集,而不是我的情况。

DateFormat 类允许您定义要解析的日期模式。我创建了模式“EEE,dd MMM yyyy hh:mm a zzz”。

使用它我得到一个FormatException: Trying to read a from Mon, 11 Aug 2014 12:53 pm PDT at position 23

看起来解析器不喜欢 PM 标记案例(我打开了一个 issue about)。

我试图解决这个问题,将整个字符串大写。由于字符串全部大写,我再次得到一个 FormatException,因为星期和月份名称都是大写的。

还有其他解决方案或解决方法吗?

【问题讨论】:

【参考方案1】:

您可以将小写的“am”/“pm”字符替换为大写。

import 'package:intl/intl.dart';

void main() 
  var date = 'Mon, 11 Aug 2014 12:53 pm PDT';
  DateFormat format = new DateFormat("EEE, dd MMM yyyy hh:mm a zzz");
  date = date.replaceFirst(' pm', ' PM').replaceFirst(' am', ' AM');
  print(date);
  print(format.parse(date));

【讨论】:

但是注意时区是不解析的。 DateFormat 和 DateTime 都不能识别时区。 感谢提示,没注意。【参考方案2】:

试试这个包,Jiffy。它处理所有的解析,不需要大写你的字符串

var jiffy = Jiffy("Mon, 11 Aug 2014 12:53 pm PDT", "EEE, dd MMM yyyy hh:mm a zzz");

您还可以轻松地对其进行格式化和操作 dateTime。示例

jiffy.format("dd MM yyyy");
// Or use DateFormat's default date time formats
jiffy.yMMMM;
// Also get relative time
jiffy.fromNow();

【讨论】:

以上是关于用 dart 解析日期的主要内容,如果未能解决你的问题,请参考以下文章

Dart - 将字符串日期格式化为日期时间

flutter DateTime 日期时间详细解析 Dart语言基础

flutter DateTime 日期时间详细解析 Dart语言基础

Flutter/Dart - 在输入表单中格式化日期

如何在 Dart 中格式化日期? [复制]

Flutter/Dart 仅提取日期和时间? [复制]