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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:39:25