我有一个列表,其中包含一些字符串值(未定义多少,但它们是日期),我希望将这些值转换为DateTime,然后将每个值存储到以下行:
specialDates:[DateTime(2022, 08, 16),DateTime(2022,08,03)]),这一行只接受DateTime值
发布于 2022-08-17 13:05:34
我想DateTime<List>的意思是List<DateTime>。在这种情况下,您可以将List.map和DateTime.parse组合起来,快速将整个字符串列表转换为Datetime对象的列表。
final strings = [
'2022-01-01T12:00:00Z',
'2022-01-02T12:00:00Z',
'2022-01-03T12:00:00Z',
'2022-01-04T12:00:00Z',
];
final dates = strings.map((s) => DateTime.parse(s)).toList();如果您想要简洁,可以直接引用DateTime.parse,从而完全消除lambda函数:
final dates = strings.map(DateTime.parse).toList();请注意,这假定列表中的所有字符串都是有效的日期时间字符串,格式为DateTime.parse可以识别的格式(如ISO-8601时间戳)。如果您不能保证总是这样,而不是DateTime.parse,那么您希望使用DateTime.tryParse。但是,tryParse将返回一个DateTime?而不是一个DateTime (这意味着它可以为null),所以如果您不想这样做,您需要在列表上做更多的工作来过滤空值:
final strings = [
'2022-01-01T12:00:00Z',
'2022-01-02T12:00:00Z',
'2022-01-03T12:00:00Z',
'asdfasd',
'2022-01-04T12:00:00Z',
];
// Results in a List<DateTime?> with bad strings becoming null
final dates = strings.map(DateTime.tryParse).toList();
// Results in a List<DateTime> with bad strings filtered out
final dates = strings.map(DateTime.tryParse)
.where((dt) => dt != null)
.cast<DateTime>()
.toList();https://stackoverflow.com/questions/73388629
复制相似问题