我试图从值列表中计算最大值。为此,当我按下按钮时,我将当前时间保存在字符串列表中。但是要计算最大值,我需要一个DateTime列表,但是sharedpref只能保存listString。因此,我需要将字符串列表转换为日期时间列表。
我搜索提取列表的每个日期之间的最大值(duration)。
示例
var strList =
[ '2019-12-03 12:00',
'2019-12-03 12:15',
'2019-12-03 12:20',
'2019-12-03 12:11',
]
Output = 15 minutes
我尝试过,但是找不到解决方法
DateTime maxDate;
List<String> stringList = [];
List<DateTime> DateList= [];
load_max_conso() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
stringList= prefs.getStringList("save_max_list",);
DateList = stringList.parse('1974-03-20 00:00:00');
maxDate = DateList[0];
DateList.forEach((date){
if(date.isAfter(maxDate)){
maxDate=date;
}
});
return maxDate;
});
}
编辑:
我尝试过
dateList1 = [ '2019-12-03 12:30', '2019-12-03 12:20', '2019-12-03 12:22', '2019-12-03 12:23', '2019-12-03 12:21', ];
dateList2= dateList1.map(DateTime.parse);
dateList3=dateList2.sort((a, b) => a.compareTo(b));
max = dateList3.fold((max, e) => max.isAfter(e)? max : e);
min = dateList3.fold((min, e) => min.isAfter(e)? e : min);
difference='${max.difference(min)}';
但dateList3返回null
答案 0 :(得分:0)
intl.DateFormat format = intl.DateFormat("yyyy-MM-dd HH:mm:ss");
// this is how you should parse it
for (var string in stringList) {
stringDate.add(format.parse(string));
}
或
stringDate = stringList.map((string) => format.parse(string)).toList();