You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart日期转换异常:如何将28 Jul 2017转为2017-07-28?

解决方案

Dart的DateTime.parse()仅支持ISO标准或少数特定格式的日期字符串,像"28 Jul 2017"这类自定义格式无法直接解析,必须借助intl包的DateFormat类处理,具体步骤如下:

  1. 添加依赖
    在项目的pubspec.yaml文件中添加intl依赖:

    dependencies:
      intl: ^0.18.1 # 可使用最新版本
    

    执行flutter pub get(Flutter项目)或dart pub get(纯Dart项目)完成依赖安装。

  2. 编写转换代码
    导入intl包后,先按输入日期的格式解析成DateTime对象,再格式化为目标字符串:

    import 'package:intl/intl.dart';
    
    void main() {
      String inputDate = "28 Jul 2017";
      // 定义输入格式:日 英文月份缩写 年,指定英文locale确保解析准确
      DateFormat inputFormatter = DateFormat("dd MMM yyyy", "en_US");
      DateTime date = inputFormatter.parse(inputDate);
      // 定义输出格式:年-月-日
      DateFormat outputFormatter = DateFormat("yyyy-MM-dd");
      String outputDate = outputFormatter.format(date);
      print(outputDate); // 输出: 2017-07-28
    }
    
  3. 关键注意事项

    • 必须显式指定输入格式的locale为en_US,避免因系统默认locale不同,导致英文月份缩写(Jul)无法被正确识别。
    • DateFormat支持多种格式符号,比如dd代表两位日期、MMM代表月份缩写、yyyy代表四位年份,可根据实际输入格式灵活调整。

内容的提问来源于stack exchange,提问作者lewis machilika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:24:19