在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
相关产品推荐
相关产品推荐

