【问题标题】:How to parse date time in flutter如何在颤动中解析日期时间
【发布时间】:2020-11-06 23:17:40
【问题描述】:

我从服务器获取的日期时间低于日期时间

   "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中解析日期时间

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

【问题讨论】:

    标签: android flutter dart datetime-format


    【解决方案1】:

    您的问题是您尝试使用模式"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
    }
    

    【讨论】:

    • 是的,我得到了07:18 AM,但我实际需要的是得到03:18 AM,实际上我正在使用worldtimeapi 来获取不同位置的时间
    • 是的,我在发布答案后看到了这个要求,我正在研究解决方案。 :)
    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2019-01-12
    • 2013-05-07
    • 1970-01-01
    • 2014-01-29
    • 2023-03-06
    • 2019-01-31
    • 2014-06-11
    相关资源
    最近更新 更多