Dart Flutter:如何将分离的日期与时间合并转换为单个DateTime对象
在Dart/Flutter中合并分离的日期和时间字符串为DateTime对象
你当前代码的核心问题在于没必要单独把时间转成24小时制字符串再解析成DateTime,且未将日期和时间的有效部分合并。直接解析时间后提取时分信息,再和日期的年月日组合即可完成需求。
正确实现代码
import 'package:intl/intl.dart'; void main() { String oldDateStr = "2022-08-1"; String oldTimeStr = "03:10 pm"; DateTime? newDateTime; // 定义日期和时间的解析格式 final dateFormat = DateFormat("yyyy-MM-d"); final timeFormat = DateFormat("hh:mm a"); // 解析日期和时间字符串 DateTime parsedDate = dateFormat.parse(oldDateStr); DateTime parsedTime = timeFormat.parse(oldTimeStr.toUpperCase()); // 合并日期与时间:复用日期的年月日,加上时间的时分秒 newDateTime = DateTime( parsedDate.year, parsedDate.month, parsedDate.day, parsedTime.hour, parsedTime.minute, parsedTime.second, ); // 验证结果(格式化为目标字符串) print(DateFormat("yyyy-MM-dd HH:mm").format(newDateTime!)); // 输出:2022-08-01 15:10 }
关键说明
- 解析时间时,
timeFormat.parse会直接将12小时制时间转为包含正确24小时制小时数的DateTime对象,无需额外转字符串再解析。 - 合并操作通过DateTime构造函数完成,直接提取日期的年、月、日和时间的时、分、秒参数即可。
- 若要避免解析失败抛出异常,可将
parse替换为tryParse,并增加非空判断:
DateTime? parsedDate = dateFormat.tryParse(oldDateStr); DateTime? parsedTime = timeFormat.tryParse(oldTimeStr.toUpperCase()); if (parsedDate != null && parsedTime != null) { newDateTime = DateTime( parsedDate.year, parsedDate.month, parsedDate.day, parsedTime.hour, parsedTime.minute, ); }
内容的提问来源于stack exchange,提问作者Hardik
相关产品推荐
相关产品推荐

