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

在Dart中如何将日期时间字符串转换为DateTime对象?含实例场景

在Dart中转换日期时间字符串为DateTime对象的方法

嘿,我来帮你搞定Dart里的日期转换问题!这个需求在日常开发里挺常见的,我分两种情况给你讲清楚:

一、通用的日期字符串转DateTime方法

Dart自带的DateTime.parse()是最常用的工具,但它只认符合ISO 8601标准的格式(比如"1974-03-20T00:00:00.000"这种用T分隔日期和时间的格式)。如果你的字符串是这种标准格式,直接用就行:

String isoDateStr = "1974-03-20T00:00:00.000";
DateTime dateTime = DateTime.parse(isoDateStr);

但如果是自定义格式(比如你遇到的用空格分隔日期和时间的情况),就得借助intl包的DateFormat类——这是Dart社区处理自定义日期格式的标准方案。

二、针对"1974-03-20 00:00:00.000"的转换方法

你给出的字符串格式是yyyy-MM-dd HH:mm:ss.SSS(年份-月份-日期 时:分:秒.毫秒),默认的DateTime.parse()会报错,因为它不认空格分隔的日期时间。这里有两种实用的解决办法:

方法1:用intl包自定义格式转换

首先要在你的pubspec.yaml里添加依赖:

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

运行flutter pub get或者dart pub get安装依赖后,就能写代码了:

import 'package:intl/intl.dart';

void main() {
  String targetStr = "1974-03-20 00:00:00.000";
  // 定义和字符串完全匹配的格式模板
  DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm:ss.SSS");
  // 转换为DateTime对象
  DateTime result = dateFormat.parse(targetStr);
  
  print(result); // 输出: 1974-03-20 00:00:00.000
}

这种方法的优势是灵活,不管是什么奇怪的自定义格式,只要对应上模板就能轻松转换。

方法2:手动修改字符串为ISO格式(无需第三方包)

如果不想引入额外依赖,你可以把字符串里的空格替换成T,转换成标准的ISO格式后再用DateTime.parse():

void main() {
  String targetStr = "1974-03-20 00:00:00.000";
  // 把空格替换成T,转为ISO 8601格式
  String isoStr = targetStr.replaceFirst(' ', 'T');
  DateTime result = DateTime.parse(isoStr);
  
  print(result); // 输出: 1974-03-20 00:00:00.000
}

这个方法适合这种和ISO格式只差一点点的场景,简单快捷还不用加依赖。

内容的提问来源于stack exchange,提问作者Daniel Mana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:01:01