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

Flutter中DateTime.parse无法识别日期格式,如何转换为指定显示格式?

解决DateTime解析失败及日期格式转换问题

一、解析现有日期字符串并转换格式

DateTime.parse()仅支持带前导零的标准日期格式(如yyyy-MM-dd HH:mm),而你存储的2022-9-14 19:34中月份是一位数,导致解析失败。可以通过intl包的DateFormat处理自定义格式:

  1. 添加依赖到pubspec.yaml:
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1 # 可使用最新版本
  1. 导入包并编写转换代码:
import 'package:intl/intl.dart';

// 假设_inicio是从SharedPreferences读取的日期字符串
String _inicio = "2022-9-14 19:34";

// 定义输入格式,匹配存储的"yyyy-M-dd HH:mm"格式
DateFormat inputFormatter = DateFormat("yyyy-M-dd HH:mm");
DateTime dt1 = inputFormatter.parse(_inicio);

// 定义目标格式"dd-MM-yyyy HH:mm"并转换
DateFormat outputFormatter = DateFormat("dd-MM-yyyy HH:mm");
String formattedDate = outputFormatter.format(dt1);

print(formattedDate); // 输出:14-09-2022 19:34

二、优化日期保存代码,避免后续解析问题

原代码直接拼接字符串会生成不带前导零的月份/日期,改用DateFormat生成标准格式字符串,后续解析无需额外处理:

import 'package:intl/intl.dart';
import 'package:shared_preferences/shared_preferences.dart';

// 获取当前日期和选择的时间
var hoy = DateTime.now();
String timePart = _timeOfDay.format(context);

// 用DateFormat生成带前导零的日期部分
String datePart = DateFormat("yyyy-MM-dd").format(hoy);
var fechaHora = "$datePart $timePart";

// 保存到SharedPreferences
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("fecha_hora", fechaHora);

保存后的字符串格式为2022-09-14 19:34,后续可直接用DateTime.parse()解析,转换格式同样使用DateFormat即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:25:22