繁体   English   中英

用于日期的Java hashmap搜索键

[英]Java hashmap search keys for a date

我有一个hashmap:map dateEvent = new HashMap(); 其中key是日期和时间,value是字符串。 我用数据填充集合,其中日期格式为dd.MM.yyyy HH:mm。 如何根据这种格式获取所有日期键:dd.MM.yyyy?

这段代码可以解决问题:

public static void findEvents(Map<Date, Event> dateEvents, Date targetDate) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
    String target = dateFormat.format(targetDate); 
    for (Map.Entry<Date, Event> entry : dateEvents.entrySet()) {
        if (dateFormat.format(entry.getKey()).equals(target)) {
            System.out.println("Event " + entry.getValue() + " is on the specified date");
        }
    }
}

这里重要的是在比较之前将所有日期转换为格式为“dd.MM.yyyy”的字符串,因此如果日期相同,则小时/分钟/秒的任何差异仍然匹配。

此代码还演示了迭代地图的最佳方式(恕我直言)。

不确定我是否帮助你。 但是,您可以使用map.keySet()从地图中获取一组键。 如果要查找所有不同的日期,请将所有日期填入集合中。 如果要将精度降低到几天,一种解决方案是将日期转换为所需格式并将这些字符串添加到集合中。 重复项将自动删除。

例如:

Map<Date, String> yourMap = [..];

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");

Set<String> differentDates = new HashSet<String>();
for (Date date: yourMap.keySet()) {
    differentDates.add(simpleDateFormat.format(date));
}

你有(至少)两个选择:

您可以编写自己的Date类,它提供hashCode()equals()适当实现。 (如果这样做,不建议您将该类基于已定义这些方法的另一个类(例如java.util.Date )。)

蛮力替代方案是扫描所有键是否符合您的标准。

日期01.01.2011 (dd.MM.yyyy)和日期01.01.2011 00:00dd.MM.yyyy HH:mm)之间没有区别。

Date持有一个long ,有几小时和几分钟。 即使是public Date(int year, int month, int date)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM