首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从多个相同的日期列表中标记最新的日期时间

如何从多个相同的日期列表中标记最新的日期时间
EN

Stack Overflow用户
提问于 2022-10-13 06:31:01
回答 2查看 91关注 0票数 0

Json名单-

代码语言:javascript
复制
[
  {
    "date": "2022-10-10T09:53:40.835519+05:30",
    "value": 10
  },
  {
    "date": "2022-10-13T09:53:40.835519+05:30",
    "value": 12
  },
  {
    "date": "2022-10-13T10:53:40.835519+05:30",
    "value": 15
  },
   {
    "date": "2022-10-15T10:53:40.835519+05:30",
    "value": 20
  }
]

在上面的列表中,如果同一天有多个dateTimes (例如)。因此,如何将对象列表中的2022-10-13T10:53标记为isLatestDateForSameDay=true (2022-10-13T10:53)是与2022-10-13T09:53相比较的最新结果。

如果只有一个dateTime,那么它也应该标记为isLatestDateForSameDay=true ex。(2022-10-10T09:53:40.835519+05:30及2022-10-15T10:53:40.835519+05:30)

DataListItem类-

代码语言:javascript
复制
class DataListItem {
  String date;
  int value;
  bool isLatestDate;

  DataListItem({
    required this.date,
    required this.value,
    this.isLatestDateForSameDay = false,
  });
}

预期的物品清单-

代码语言:javascript
复制
[
  DataListItem(date: '2022-10-10T09:53:40.835519+05:30', value: 10, isLatestDateForSameDay: true),
  DataListItem(date: '2022-10-13T09:53:40.835519+05:30', value: 12, isLatestDateForSameDay: false),
  DataListItem(date: '2022-10-13T10:53:40.835519+05:30', value: 15, isLatestDateForSameDay: true),
  DataListItem(date: '2022-10-15T10:53:40.835519+05:30', value: 20, isLatestDateForSameDay: true),
];
EN

回答 2

Stack Overflow用户

发布于 2022-10-13 07:02:22

尝试使用DateTime.parse()对列表进行排序

代码语言:javascript
复制
 List<DataListItem> dataListItemlist = [];

  list.sort(
    (a, b) {
      return DateTime.parse(a["date"]).compareTo(DateTime.parse(b["date"]));
    },
  );

  List<String> repeatedDate = [];
  for (var i = list.length - 1; i >= 0; i--) {
    Map item = list[i];
    DateTime date = DateTime.parse(item["date"]);
    int day = date.day;
    int month = date.month;
    int year = date.year;
    String formatedDate = "$day-$month-$year";
    if (repeatedDate.contains(formatedDate)) {
      dataListItemlist.add(
        DataListItem(
          date: item["date"],
          value: item["value"],
          isLatestDateForSameDay: false,
        ),
      );
    } else {
      dataListItemlist.add(
        DataListItem(
          date: item["date"],
          value: item["value"],
          isLatestDateForSameDay: true,
        ),
      );
      repeatedDate.add(formatedDate);
    }
  }
票数 1
EN

Stack Overflow用户

发布于 2022-10-13 07:35:23

让我们假设您的json是带有jsonData包的集合包,您可以得到您想要的东西:

代码语言:javascript
复制
var grouped = groupBy(
  jsonData,
  (Map item) => (item['date'] as String).substring(0, 10),
);
List<DataListItem> result = [];

for (var element in grouped.entries) {
  if (element.value.length == 1) {
    result.add(DataListItem(
        date: element.value.first['date'] as String,
        value: element.value.first['value'] as int,
        isLatestDate: true));
  } else {
    var latesItem = findLatestDate(element.value);

    element.value.remove(latesItem);
    result.add(DataListItem(
        date: latesItem['date'] as String,
        value: latesItem['value'] as int,
        isLatestDate: true));
    element.value.forEach((e) => result.add(DataListItem(
        date: e['date'] as String,
        value: e['value'] as int,
        isLatestDate: false)));
  }
}

Map<String, dynamic> findLatestDate(List<Map<String, dynamic>> dateList) {
    Map<String, dynamic>? result;
    for (var element in dateList) {
      if (result == null) {
        result = element;
      } else {
        DateTime resultDate =
            DateFormat("yyyy-MM-ddThh:mm:ss").parse(result['date'] as String);
        DateTime tempDate =
            DateFormat("yyyy-MM-ddThh:mm:ss").parse(element['date'] as String);

        if (tempDate.isAfter(resultDate)) {
          result = element;
        }
      }
    }
    return result!;
  }

for (var element in result) {
  print("result= ${element.date} ${element.value} ${element.isLatestDate}");

  // result= 2022-10-10T09:53:40.835519+05:30 10 true
  // result= 2022-10-13T10:53:40.835519+05:30 15 true
  // result= 2022-10-13T09:53:40.835519+05:30 12 false
  // result= 2022-10-15T10:53:40.835519+05:30 20 true
}

还可以将英特用于DateFormat

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74051343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档