我有一个从服务器返回的列表,如下所示:
final userTimezone = currentUser?.timezone; // "America/New_York"
final list = [
{id: 1, name: 'thing 1', startTime: 2023-07-14 07:30:00.000Z},
{id: 2, name: 'thing 2', startTime: 2023-07-20 08:00:00.000Z},
{id: 3, name: 'thing 3', startTime: 2023-07-25 20:15:00.000Z},
{id: 4, name: 'thing 4', startTime: 2023-07-26 13:00:00.000Z},
];
字符串
所有这些都以UTC时区返回。
我想做的是过滤这个列表,以便只包含与用户所在时区相关的上午8点(08:00)到下午7点(19:00)之间的项目。
这是我尝试过的,但我不认为它一定是正确的:
list = list.where((appointment) {
final start = appointment.startAt.toLocal();
final end = appointment.endAt.toLocal();
final startHour = start.hour;
final endHour = end.hour;
final startMinute = start.minute;
final endMinute = end.minute;
final startSecond = start.second;
final endSecond = end.second;
final isStartValid = startHour >= 8 && startHour <= 19 && startMinute == 0 && startSecond == 0;
final isEndValid = endHour >= 8 && endHour <= 19 && endMinute == 0 && endSecond == 0;
return isStartValid && isEndValid;
}).toList();
型
我有几个项目似乎在可接受的范围内(没有在示例中列出),但它没有出现在列表中。
我是一个有点新的 dart ,所以我不完全确定什么是提供给我或没有。谢谢你的阅读。
2条答案
按热度按时间5jvtdoz21#
我用forEach写了这个,(时区没有区别,你可以使用它的代码):
字符串
qmelpv7a2#
现在,您的时间只有在分钟和秒为0时才有效,因此,例如,下午3:30的约会将被过滤掉。
你走在正确的道路上,但问题是,当他们最终不重要时,你会关注自己的分分秒秒。想想看-如果小时本身福尔斯在上午8:00和下午7:00之间,那么分钟和秒可能是什么,使整个时间戳不在这个范围内?
字符串