【问题标题】:In Flutter, when retrieving a DateTime parameter via API, how can I parse the time and convert it from "2019-10-30T20:30:00" to 8:30pm?在 Flutter 中,通过 API 检索 DateTime 参数时,如何解析时间并将其从“2019-10-30T20:30:00”转换为 8:30pm?
【发布时间】:2019-10-30 21:28:49
【问题描述】:

通过 API 检索课程表时,课程时间(在 API RESPONSE 中)显示为“2019-10-30T20:30:00”。我只是想解析时间并将其转换为 12 小时时间格式?

这是我提取当前时间字符的代码...


Container(
    child: Text(data[index]['StartDateTime'][11].toString()),
  ),
   Container(
     child: Text(data[index]['StartDateTime'][12].toString()),
  ),
   Container(
     child: Text(data[index]['StartDateTime'][13].toString()),
  ),
   Container(
     child: Text(data[index]['StartDateTime'][14].toString()),
  ),
   Container(
     child: Text(data[index]['StartDateTime'][15].toString()),

当前输出是这样的:20:30

【问题讨论】:

    标签: api datetime parsing flutter


    【解决方案1】:

    DateTime 有一个名为 parse 的函数,它返回一个 DateTime 对象,然后您可以使用 Flutter 进行操作 https://api.flutter.dev/flutter/dart-core/DateTime/parse.html

    所以你这样做

    DateTime p = DateTime.parse('2019-10-30T20:30:00');
    print('${p.hour}:${p.minute}');
    

    它会打印 20:30

    你甚至可以计算日期差异,转换成字符串等

    【讨论】:

      【解决方案2】:

      更新

      刚刚找到这个库:https://pub.dev/packages/intl。它似乎包含来自 Dart API 的 DateFormat 库,它也可以满足您的需求。

      原创

      我认为没有内置的方法可以获取 AM/PM 时间。你必须写一些逻辑。这是我的,可能会更容易。

      void main() {
        String time = '2019-10-30T20:30:00';
        DateTime dateTime = DateTime.parse(time);
      
        String formatted = formatDateWithAmPm(dateTime);
      
        print(formatted);
      }
      
      String formatDateWithAmPm(DateTime dateTime) {
        String amPm = 'am';
        if (dateTime.hour >= 12) {
          amPm = 'pm';
        }
      
        String hour = dateTime.hour.toString();
        if (dateTime.hour > 12) {
          hour = (dateTime.hour - 12).toString();
        }
      
        String minute = dateTime.minute.toString();
        if (dateTime.minute < 10) {
          minute = '0${dateTime.minute}';
        }
      
        return '$hour:$minute$amPm';
      }
      

      【讨论】:

      • 谢谢德里克,太好了。稍后我会尝试一下,看看效果如何!
      【解决方案3】:

      试试这个包,Jiffy

      var jiffy = Jiffy("2019-10-30T20:30:00", "yyyy-MM-ddThh:mm:ss");
      
      var String = jiffy.format("h:mm"); // 8:30
      // or use default formats
      var String = jiffy.jm; // 8:30 PM
      

      你也可以在你的 DateTime 对象中解析

      String time = '2019-10-30T20:30:00';
      DateTime dateTime = DateTime.parse(time);
      Jiffy(dateTime).format("h:mm"); // 8:30
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-26
        • 2016-08-10
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        相关资源
        最近更新 更多