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

Flutter中如何将"10-jan-2022"字符串转换为DateTime?

解决Flutter中解析"10-jan-2022"格式字符串为DateTime的问题

Flutter自带的DateTime.parse()方法不支持"10-jan-2022"这类自定义格式,想要成功解析,可通过以下两种方法实现:

方法一:使用intl包(推荐)

  1. 添加依赖
    在项目的pubspec.yaml文件中添加intl依赖:
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1 # 可替换为最新稳定版本

执行flutter pub get完成依赖安装。

  1. 导入包并执行解析
    导入intl包后,指定对应格式和英文locale(确保月份缩写能被正确识别):
import 'package:intl/intl.dart';

void main() {
  String targetDate = "10-jan-2022";
  // 格式d-MMM-yyyy对应日-月份缩写-年份,en_US确保英文月份解析生效
  DateFormat dateFormatter = DateFormat('d-MMM-yyyy', 'en_US');
  DateTime parsedDate = dateFormatter.parse(targetDate);
  print(parsedDate); // 输出:2022-01-10 00:00:00.000
}

方法二:手动解析(不依赖第三方包)

如果不想引入intl包,可以手动拆分字符串,通过月份映射表构造DateTime:

void main() {
  String targetDate = "10-jan-2022";
  List<String> dateParts = targetDate.split('-');
  
  // 英文月份缩写到数字的映射
  final monthMap = {
    'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6,
    'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12
  };

  int day = int.parse(dateParts[0]);
  int month = monthMap[dateParts[1].toLowerCase()]!;
  int year = int.parse(dateParts[2]);
  
  DateTime parsedDate = DateTime(year, month, day);
  print(parsedDate); // 输出:2022-01-10 00:00:00.000
}

注意:手动解析需要自行处理各种异常情况(比如无效的月份缩写、非数字的日/年份等),健壮性不如intl包。

内容的提问来源于stack exchange,提问作者Priyaranjan Mantri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:45:14