在Dart/Flutter中如何将EEE, MMM d, yyyy hh:mm aaa转为yyyy-MM-dd HH:mm:ss
Flutter中日期字符串转指定格式DateTime的正确方法
你的代码存在两个核心问题:
- 格式逻辑错误:你直接用目标输出格式处理输入字符串,且
format()方法要求传入DateTime对象而非字符串,这会直接触发类型错误。 - 格式符使用错误:
YYYY代表周年(非常规公历年)、DD代表年中的天数,正确的公历年和日格式应为yyyy和dd。
正确实现步骤
要完成需求需分两步操作:
- 按照输入字符串的格式,将其解析为
DateTime对象 - 若需要目标格式的字符串,再将
DateTime对象格式化输出(仅需DateTime对象的话,完成第一步即可,格式是展示层面的需求)
修正后的代码
import 'package:intl/intl.dart'; void main() { String inputDateTime = "Fri, Sep 30, 2022 01:10 PM"; // 第一步:匹配输入格式,解析为DateTime对象 DateFormat inputFormatter = DateFormat('EEE, MMM dd, yyyy hh:mm a', 'en_US'); DateTime dateTime = inputFormatter.parse(inputDateTime); // 第二步:格式化为目标字符串格式 DateFormat outputFormatter = DateFormat('yyyy-MM-dd HH:mm:ss'); String formattedDate = outputFormatter.format(dateTime); print(dateTime); // 输出DateTime对象:2022-09-30 13:10:00.000 print(formattedDate); // 输出目标格式字符串:2022-09-30 13:10:00 }
关键说明
- 输入格式
'EEE, MMM dd, yyyy hh:mm a'对应解析规则:EEE:缩写星期(如Fri)MMM:缩写月份(如Sep)dd:两位日期(如30)yyyy:四位年份(如2022)hh:12小时制小时(如01)a:上/下午标识(如PM)
- 指定
'en_US'作为本地化参数,确保英文月份、星期的解析不受系统语言影响。
内容的提问来源于stack exchange,提问作者Muhammad Hassan
相关产品推荐
相关产品推荐

