dateDiff
2つの日付の間隔を取得する。
public static long dateDiff(Date d1, Date d2, int field) { Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); switch (field) { case Calendar.YEAR: return diffYear(c1, c2); case Calendar.MONTH: return diffMonth(c1, c2); case Calendar.DATE: return diffDay(c1, c2); case Calendar.HOUR_OF_DAY: return diffHour(c1, c2); case Calendar.MINUTE: return diffMinute(c1, c2); case Calendar.SECOND: return diffSecond(c1, c2); default: throw new UnsupportedOperationException(); } } private static long diffYear(Calendar c1, Calendar c2) { return c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR); } private static long diffMonth(Calendar c1, Calendar c2) { return diffYear(c1, c2) * 12 + c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH); } private static long diffDay(Calendar c1, Calendar c2) { c1.set(Calendar.HOUR_OF_DAY, 0); c1.set(Calendar.MINUTE, 0); c1.set(Calendar.SECOND, 0); c2.set(Calendar.HOUR_OF_DAY, 0); c2.set(Calendar.MINUTE, 0); c2.set(Calendar.SECOND, 0); return (c2.getTimeInMillis() - c1.getTimeInMillis()) / 86400000L; } private static long diffHour(Calendar c1, Calendar c2) { int h1 = c1.get(Calendar.HOUR_OF_DAY); int h2 = c2.get(Calendar.HOUR_OF_DAY); return diffDay(c1, c2) * 24 + h2 - h1; } private static long diffMinute(Calendar c1, Calendar c2) { int m1 = c1.get(Calendar.MINUTE); int m2 = c2.get(Calendar.MINUTE); return diffHour(c1, c2) * 60 + m2 - m1; } private static long diffSecond(Calendar c1, Calendar c2) { int s1 = c1.get(Calendar.SECOND); int s2 = c2.get(Calendar.SECOND); return diffMinute(c1, c2) * 60 + s2 - s1; }