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

时间:2020-07-17 07:22:43

标签: android flutter dart datetime-format

我从服务器获取不到日期时间

   "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

显示以上时间

有人知道如何在颤动中解析日期时间

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

1 个答案:

答案 0 :(得分:1)

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

相反,您真正想要的是将日期时间字符串解析为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的内部状态是正确的。

如果您想将datetime字符串直接解析为本地时间,我认为最简单的方法是删除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
}