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
相关产品推荐
相关产品推荐

