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

在Dart/Flutter中如何将EEE, MMM d, yyyy hh:mm aaa转为yyyy-MM-dd HH:mm:ss

Flutter中日期字符串转指定格式DateTime的正确方法

你的代码存在两个核心问题:

  1. 格式逻辑错误:你直接用目标输出格式处理输入字符串,且format()方法要求传入DateTime对象而非字符串,这会直接触发类型错误。
  2. 格式符使用错误:YYYY代表周年(非常规公历年)、DD代表年中的天数,正确的公历年和日格式应为yyyy和dd。

正确实现步骤

要完成需求需分两步操作:

  1. 按照输入字符串的格式,将其解析为DateTime对象
  2. 若需要目标格式的字符串,再将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:15:42