DateTime
对象中解析这种日期“Mon, 11 Aug 2014 12:53 pm 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 标记情况(我已经打开了一个关于问题的问题)。
我尝试解决整个字符串大写的问题。当字符串全部大写时,由于星期和月份名称都是大写的,我再次得到 FormatException。
还有其他解决方案或解决方法吗?
您只需将小写的“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));
}
试试这个包,Jiffy。它处理所有解析,无需将字符串大写
var jiffy = Jiffy.parse("Mon, 11 Aug 2014 12:53 pm PDT", pattern: "EEE, dd MMM yyyy hh:mm a zzz");
您还可以轻松格式化它并操作日期时间。示例
jiffy.format("dd MM yyyy");
// Or use DateFormat's default date time formats
jiffy.yMMMM;
// Also get relative time
jiffy.fromNow();
对于想要像 python datetime.strptime() 那样解析的人,我建议使用 d4_date_format。 该包接受标准标识符,如 %Y、%m 等;并且可以按任何顺序放置,例如:“%Y%m%d”可以毫无问题地解析“20241216”。 intl 和 jiffy 无法理解的东西,而且这个库也不关心语言环境,所以任何组合都是可能的。
以这种形式解析日期时间的示例:“20241216080401”,代码将如下所示:
var parser = timeParse("%Y%m%d%H%M%S");
DateTime dateAndTime = parser("20241216080401");