dart 如何将所有类型的日期格式解析为DateTime?

wlwcrazw  于 2023-05-04  发布在  其他
关注(0)|答案(2)|浏览(204)

我目前正在创建一个应用程序来管理RSS提要。因为对于文章的发布日期没有一个固定的标准(有,但是不管什么原因,很多提要没有遵循它),我有多种不同类型的日期字符串要解析。
我可以解析这些类型的日期:

Thu, 01 Jan 1970 00:00:00 +0000

然而,NASA的突发新闻提要上使用的日期格式类似于:

Thu, 01 Jan 1970 00:00 GMT

JavaScript的日期解析器可以轻松解析这两种类型,但我在Dart中找不到解决方案。我尝试使用HttpDate解析器,这是与此类型最相似的解析器,但它失败了,因为格式中没有秒的指示符。我还担心,还有一些我不知道的日期格式类型,JavaScript可以解析,但Dart不能。我该怎么办?

vmjh9lq9

vmjh9lq91#

这里我使用INTL包来建立两个模式,然后我创建一个函数来尝试解析每个模式的日期,如果失败,它会抛出一个异常

import 'package:intl/intl.dart';

void main() {
  // Parse Thu, 01 Jan 1970 00:00:00 +0000
  final formatter1 = DateFormat('E, dd MMM yyyy HH:mm:ss Z');
  final date1 = formatter1.parse('Thu, 01 Jan 1970 00:00:00 +0000');
  print(date1); // 1970-01-01 00:00:00.000Z
  
  // Parse Thu, 01 Jan 1970 00:00 GMT
  final formatter2 = DateFormat('E, dd MMM yyyy HH:mm zzz');
  final date2 = formatter2.parse('Thu, 01 Jan 1970 00:00 GMT');
  print(date2); // 1970-01-01 00:00:00.000Z
}

DateTime parseDate(String dateString) {
  final formatter1 = DateFormat('E, dd MMM yyyy HH:mm:ss Z');
  final formatter2 = DateFormat('E, dd MMM yyyy HH:mm zzz');
  
  try {
    return formatter1.parse(dateString);
  } catch (_) {}
  
  try {
    return formatter2.parse(dateString);
  } catch (_) {}
  
  throw Exception('Failed to parse date: $dateString');
}
hiz5n14c

hiz5n14c2#

您可以使用timezone将DateTime转换为TZDateTime

import 'package:timezone/timezone.dart' as tz;

...

DateTime dt = DateTime.now(); //Or whatever DateTime you want
final tzdatetime = tz.TZDateTime.from(dt, tz.local); //could be var instead of final

相关问题