Flutter中DateTime.parse无法识别日期格式,如何转换为指定显示格式?
解决DateTime解析失败及日期格式转换问题
一、解析现有日期字符串并转换格式
DateTime.parse()仅支持带前导零的标准日期格式(如yyyy-MM-dd HH:mm),而你存储的2022-9-14 19:34中月份是一位数,导致解析失败。可以通过intl包的DateFormat处理自定义格式:
- 添加依赖到
pubspec.yaml:
dependencies: flutter: sdk: flutter intl: ^0.18.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
相关产品推荐
相关产品推荐

