【问题标题】:Dart Function for Formatting Date and Time用于格式化日期和时间的 Dart 函数
【发布时间】:2020-12-03 08:33:26
【问题描述】:

如何创建一个函数来使用 Dart 将 '11082020_150258' 之类的内容转换为 '11 August 2020' 和 '3:02 PM' 之类的日期和时间?

【问题讨论】:

    标签: string flutter dart


    【解决方案1】:

    首先,您可以使用正则表达式来解析文本:

    RegExp exp = new RegExp(r"\d{2}");
    

    正则表达式\d{2} 匹配字符串的每两位数字。然后你可以做一个列表来存储这组数字:

    Iterable<Match> matches = exp.allMatches('11082020_150258');
    var list = matches.map((m) => m.group(0)).toList();
    

    获取字符串的日期部分:

    String dateStr = list.sublist(0, 3).join('/') + list[3].toString();
    

    获取字符串的时间部分:

    String timeStr = list.sublist(4).join(':');
    

    从字符串创建DateTime 对象(使用intl package 中的DateFormat)

    var parsedDate = DateFormat('dd/M/yyyy HH:mm:ss').parse(dateStr + ' ' + timeStr);
    

    您可以使用此DateTime。如果您想以问题中提到的格式打印(即11 August 2020, 3:02 PM):

    DateFormat format = new DateFormat('d MMMM yyyy, HH:mm a', 'en_US');
    print(format.format(parsedDate));
    

    完整代码:

    RegExp exp = new RegExp(r"\d{2}");
    Iterable<Match> matches =
    exp.allMatches('11082020_150258');
    var list =
    matches.map((m) => m.group(0)).toList();
    String dateStr =
        list.sublist(0, 3).join('/') + list[3].toString();
    String timeStr = list.sublist(4).join(':');
    var parsedDate = DateFormat('dd/M/yyyy HH:mm:ss')
        .parse(dateStr + ' ' + timeStr);
    DateFormat format =
    new DateFormat('d MMMM yyyy, HH:mm a', 'en_US');
    print(format.format(parsedDate));
    

    【讨论】:

      【解决方案2】:

      您首先需要将您的字符串解析为DateTime 对象。不幸的是,DateFormat 来自 package:intl does not support parsing timestamps without field separators,所以你需要手动解析它。您可以使用正则表达式:

      var timestampString = '11082020_150258';
      var re = RegExp(
        r'^'
        r'(?<day>\d{2})'
        r'(?<month>\d{2})'
        r'(?<year>\d{4})'
        r'_'
        r'(?<hour>\d{2})'
        r'(?<minute>\d{2})'
        r'(?<second>\d{2})'
        r'$',
      );
      
      var match = re.firstMatch(timestampString);
      if (match == null) {
        throw FormatException('Unrecognized timestamp format');
      }
      var dateTime = DateTime(
        int.parse(match.namedGroup('year')),
        int.parse(match.namedGroup('month')),
        int.parse(match.namedGroup('day')),
        int.parse(match.namedGroup('hour')),
        int.parse(match.namedGroup('minute')),
        int.parse(match.namedGroup('second')),
      );
      

      一旦有了DateTime 对象,就可以使用DateFormat 对其进行格式化:

      var dateString = DateFormat('d MMMM yyyy').format(dateTime);
      var timeString = DateFormat('h:mm a').format(dateTime);
      
      print(dateString); // Prints: 11 August 2020
      print(timeString); // Prints: 3:02 PM
      

      【讨论】:

        猜你喜欢
        • 2020-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-06
        • 2013-04-14
        • 1970-01-01
        • 2020-10-20
        相关资源
        最近更新 更多