我需要制作日期是键的地图.如果2个日期对象具有相同的getTime()方法值,则它们是等于的.
我只对年,月,日感兴趣.如何trim获得"清除"日期不必要的小时和分钟?
Osc*_*Ryz 24
您可以创建一个trim方法:
public static Date trim(Date date) {
Calendar cal = Calendar.getInstance();
cal.clear(); // as per BalusC comment.
cal.setTime( date );
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
Run Code Online (Sandbox Code Playgroud)
并使用它像:
map.put( trim( aDate ), xyz() );
Run Code Online (Sandbox Code Playgroud)
...
map.get( trim( otherDate ));
Run Code Online (Sandbox Code Playgroud)
这是一个完整的工作样本:
import java.util.Calendar;
import java.util.Date;
import static java.util.Calendar.*;
import static java.lang.System.out;
public class DateTest {
public static void main( String [] args ) throws InterruptedException {
Date date = new Date();
Thread.sleep(1);
Date other = new Date();
out.printf("equals? = %s, hashCode? = %s %n", (date.equals(other)), (date.hashCode() == other.hashCode()));
Date todayeOne = trim( date );
Date todayTwo = trim( date );
out.printf("equals? = %s, hashCode? = %s %n", (todayeOne.equals(todayTwo)), (todayeOne.hashCode() == todayTwo.hashCode()));
}
public static Date trim(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime( date );
cal.set(HOUR_OF_DAY, 0);
cal.set(MINUTE, 0);
cal.set(SECOND, 0);
cal.set(MILLISECOND, 0);
return cal.getTime();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ java DateTest
equals? = false, hashCode? = false
equals? = true, hashCode? = true
Run Code Online (Sandbox Code Playgroud)
使用自定义Comparator<Date>的TreeMap<Date,V>.
Comparator<Date> ymdComparator = new Comparator<Date>() {
@Override public int compare(Date d1, Date d2) {
return
d1.getYear() < d2.getYear() ? -1 :
d1.getYear() > d2.getYear() ? +1 :
d1.getMonth() < d2.getMonth() ? -1 :
d1.getMonth() > d2.getMonth() ? +1 :
d1.getDay() < d2.getDay() ? -1 :
d1.getDay() > d2.getDay() ? +1 :
0;
}
};
SortedMap<Date,V> map = new TreeMap<Date,V>(ymdComparator);
Run Code Online (Sandbox Code Playgroud)
哦,java.util.Date糟糕,使用 Joda Time 等。
| 归档时间: |
|
| 查看次数: |
17967 次 |
| 最近记录: |