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

Flutter使用syncfusion_flutter_datepicker如何获取DateTime格式纯日期

解决方案

你不需要将格式化后的字符串转回DateTime类型,syncfusion_flutter_datepicker的DateRangePickerSelectionChangedArgs返回的args.value.startDate和args.value.endDate本身就是原生的DateTime类型,你之前转成String只是为了拼接显示用的范围文本,额外定义两个变量存储原始的DateTime值即可。

具体修改步骤

  • 第一步:在你的State类中定义两个DateTime类型的成员变量,用来存储选中的起止日期
// 放在State类里,和_range等变量同层级
DateTime? selectedStartDate;
DateTime? selectedEndDate;
  • 第二步:修改_onSelectionChanged方法的逻辑,给上面的变量赋值
void _onSelectionChanged(DateRangePickerSelectionChangedArgs args) {
  print("Printing start date before setstate");
  print(startDate);
  setState(() {
    if (args.value is PickerDateRange) {
      // 直接存储原始DateTime值
      selectedStartDate = args.value.startDate;
      selectedEndDate = args.value.endDate ?? args.value.startDate;
      // 原来的拼接显示文本的逻辑保留
      _range = DateFormat('dd/MM/yyyy')
              .format(selectedStartDate!)
              .toString() +
          ' - ' +
          DateFormat('dd/MM/yyyy')
              .format(selectedEndDate!)
              .toString();
    } else if (args.value is DateTime) {
      _selectedDate = args.value.toString();
    } else if (args.value is List<DateTime>) {
      _dateCount = args.value.length.toString();
    } else {
      _rangeCount = args.value.length.toString();
    }
  });
}
  • 第三步:需要计算日期间隔的时候,直接用存储的DateTime变量计算即可
// 计算间隔天数的示例,注意先判空避免空异常
if (selectedStartDate != null && selectedEndDate != null) {
  int daysDiff = selectedEndDate!.difference(selectedStartDate!).inDays;
  print("两个日期间隔天数:$daysDiff");
}

补充说明

如果你确实需要把格式化后的日期字符串转回DateTime类型(比如持久化存储后再读取的场景),可以用DateFormat的parse方法:

final DateFormat formatter = DateFormat('yyyy-MM-dd');
DateTime dateTime = formatter.parse(formattedStartDate);

这种方式会返回DateTime类型的对象,但当前场景下不需要走这个流程,直接用控件返回的原始DateTime值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:27:04