如何在颤动中解析日期时间

How to parse date time in flutter

我从服务器得到的时间低于日期时间

   "datetime":"2020-07-17T03:18:31.177769-04:00"

我正在使用下面的代码解析以从上面的日期获取时间

      var format = DateFormat('HH:mm a');
      debugPrint('LocalTime ${format.parse(timeZoneData.datetime)}');

我低于异常

flutter: Error 123: FormatException: Trying to read : from 2020-07-17T03:22:09.959577-04:00 at position 5

我想像这样显示上面的时间3:18 AM

谁能知道如何在 flutter 中解析日期时间

如果需要更多信息,请告诉我。提前致谢。您的努力将不胜感激。

您的问题是您正在尝试使用 "HH:mm a" 模式解析 "2020-07-17T03:18:31.177769-04:00",这是不可能的,因为该模式甚至不接近提供的字符串。

相反,您真正想要的是将日期时间字符串解析为 DateTime 对象并使用 DateFormatDateTime 转换为 String。由于您提供的日期时间字符串的格式是 dart 可以开箱即用的格式,我们可以只使用 DateTime.parse.

可以在这里看到一个例子:

import 'package:intl/intl.dart';

void main() {
  const dateTimeString = '2020-07-17T03:18:31.177769-04:00';
  final dateTime = DateTime.parse(dateTimeString);

  final format = DateFormat('HH:mm a');
  final clockString = format.format(dateTime);

  print(clockString); // 07:18 AM
}

关于时钟,如果像示例一样在字符串中提供时区,它将默认将日期时间解析为 UTC。

您可以通过以下方式输出本地时间:

final clockString = format.format(dateTime.toLocal());

但是这个解决方案当然只有在您自己的计算机具有时区偏移“-04:00”的情况下才有效。但这将是最正确的解决方案,因为 DateTime 的内部状态是正确的。

如果您想将日期时间字符串直接解析为本地时间,我认为最简单的方法是删除日期时间字符串的时区部分,例如:

final dateTime = DateTime.parse(dateTimeString.replaceFirst(RegExp(r'-\d\d:\d\d'), ''));

这将给出一个 DateTime 包含本地时间的对象,并将根据需要打印您的时间戳:

import 'package:intl/intl.dart';

void main() {
  const dateTimeString = '2020-07-17T03:18:31.177769-04:00';
  final dateTime =
      DateTime.parse(dateTimeString.replaceFirst(RegExp(r'-\d\d:\d\d'), ''));

  final format = DateFormat('HH:mm a');
  final clockString = format.format(dateTime);

  print(clockString); // 03:18 AM
}