我有一个哈希表:
Map dateEvent = new HashMap();
其中键是日期和时间,值为字符串。我填充集合的数据,其中日期格式为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的最佳方式(依我之见)。
不确定我是否理解您的意思。但是,您可以使用map.keySet()
从映射中获取键集。如果您想查找所有不同的日期,请将所有日期填入一个集合中。如果您想将精度降低到天数,则一种解决方案是将日期转换为所需格式并将这些字符串添加到集合中。重复项将自动删除。
E.g.:
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));
}
你至少有两个选择:
你可以编写自己的日期类,它提供了适当的hashCode()
和equals()
实现。(如果你这样做,不建议你将该类基于已经定义这些方法的另一个类(例如java.util.Date
)。)
暴力的替代方法是扫描所有键,无论它们是否符合你的标准。
01.01.2011
(dd.MM.yyyy)和01.01.2011 00:00
(dd.MM.yyyy HH:mm)之间没有区别。
Date
保存了一个具有小时和分钟的long
。即使对于public Date(int year, int month, int date)
也是如此。
Date
对象还是一个形式为dd.MM.yyyy HH:mm
的String
对象? - Qwerky