用 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 解析日期的主要内容,如果未能解决你的问题,请参考以下文章
flutter DateTime 日期时间详细解析 Dart语言基础