package org.dayatang.utils; import org.apache.commons.lang3.StringUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import static org.junit.Assert.*; public class DateUtilsTest { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testMaxDate() { Calendar date = Calendar.getInstance(); date.setTime(DateUtils.MAX_DATE); assertEquals(8888, date.get(Calendar.YEAR)); assertEquals(Calendar.JANUARY, date.get(Calendar.MONTH)); assertEquals(1, date.get(Calendar.DATE)); assertEquals(0, date.get(Calendar.HOUR)); assertEquals(0, date.get(Calendar.MINUTE)); assertEquals(0, date.get(Calendar.SECOND)); assertEquals(0, date.get(Calendar.MILLISECOND)); } @Test public void testMinDate() { Calendar date = Calendar.getInstance(); date.setTime(DateUtils.MIN_DATE); assertEquals(1000, date.get(Calendar.YEAR)); assertEquals(Calendar.JANUARY, date.get(Calendar.MONTH)); assertEquals(1, date.get(Calendar.DATE)); assertEquals(0, date.get(Calendar.HOUR)); assertEquals(0, date.get(Calendar.MINUTE)); assertEquals(0, date.get(Calendar.SECOND)); assertEquals(0, date.get(Calendar.MILLISECOND)); } @Test public void testDate() throws ParseException { assertEquals(DateUtils.date(1968, 4, 11), org.apache.commons.lang3.time.DateUtils.parseDate("1968-04-11", "yyyy-MM-dd")); } @Test public void getYearDiff() { assertEquals(2009 - 1968, DateUtils.getYearDiff(parseDate("1968-4-16"), parseDate("2009-5-1"))); assertEquals(2009 - 1968 - 1, DateUtils.getYearDiff(parseDate("1968-4-16"), parseDate("2009-3-20"))); assertEquals(2009 - 1968, DateUtils.getYearDiff(parseDate("1968-4-16"), parseDate("2009-4-17"))); assertEquals(2009 - 1968, DateUtils.getYearDiff(parseDate("1968-4-16"), parseDate("2009-4-16"))); assertEquals(2009 - 1968 - 1, DateUtils.getYearDiff(parseDate("1968-4-16"), parseDate("2009-4-15"))); } @Test public void getMonthDiff() { assertEquals(0, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1968-4-30"))); assertEquals(0, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1968-5-15"))); assertEquals(1, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1968-5-16"))); assertEquals(1, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1968-5-17"))); assertEquals(2, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1968-6-16"))); assertEquals(24, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1970-4-30"))); assertEquals(24, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1970-5-15"))); assertEquals(25, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1970-5-16"))); assertEquals(25, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1970-5-17"))); assertEquals(26, DateUtils.getMonthDiff(parseDate("1968-4-16"), parseDate("1970-6-16"))); } @Test public void getDayDiff() { assertEquals(31, DateUtils.getDayDiff(DateUtils.parseDate("2009-1-1"), DateUtils.parseDate("2009-2-1"))); assertEquals(2, DateUtils.getDayDiff(DateUtils.parseDate("2009-1-31"), DateUtils.parseDate("2009-2-2"))); } @Test public void getMinuteDiffByTime() { Date time1 = getTime("12:15"); Date time2 = getTime("14:14"); Date time3 = getTime("14:15"); Date time4 = getTime("14:16"); assertEquals(1, DateUtils.getMinuteDiffByTime(time1, time2)); assertEquals(2, DateUtils.getMinuteDiffByTime(time1, time3)); assertEquals(2, DateUtils.getMinuteDiffByTime(time1, time4)); } private Date getTime(String timeString) { String[] ms = StringUtils.split(timeString, ":"); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MINUTE, Integer.parseInt(ms[0])); calendar.set(Calendar.SECOND, Integer.parseInt(ms[1])); return calendar.getTime(); } @Test public void testGetPrevDate() { Date theDate = parseDate("1968-4-16"); Date prevDate = parseDate("1968-4-15"); assertEquals(prevDate, DateUtils.getPrevDay(theDate)); } @Test public void testGetNextDate() { Date theDate = parseDate("1968-4-16"); Date nextDate = parseDate("1968-4-17"); assertEquals(nextDate, DateUtils.getNextDay(theDate)); } private Date parseDate(String dateString) { try { return org.apache.commons.lang3.time.DateUtils.parseDate(dateString, new String[] {"yyyy-M-d"}); } catch (ParseException e) { e.printStackTrace(); return null; } } private Date parseDateTime(String dateString) { try { return org.apache.commons.lang3.time.DateUtils.parseDate(dateString, new String[] {"yyyy-M-d hh:mm:ss"}); } catch (ParseException e) { e.printStackTrace(); return null; } } @Test public void testIsDateAfter() { Date date1 = parseDateTime("2007-1-2 08:12:02"); Date date2 = parseDateTime("2007-1-1 18:12:02"); assertTrue(DateUtils.isDateAfter(date1, date2)); date1 = parseDateTime("2007-1-1 09:12:02"); date2 = parseDateTime("2007-1-1 08:12:02"); assertFalse(DateUtils.isDateAfter(date1, date2)); } @Test public void testIsDateBefore() { Date date1 = parseDateTime("2007-1-2 08:12:02"); Date date2 = parseDateTime("2007-1-1 18:12:02"); assertTrue(DateUtils.isDateBefore(date2, date1)); date1 = parseDateTime("2007-1-1 09:12:02"); date2 = parseDateTime("2007-1-1 08:12:02"); assertFalse(DateUtils.isDateBefore(date2, date1)); } @Test public void testIsTimeAfter() { Date date1 = parseDateTime("2007-1-1 18:12:02"); Date date2 = parseDateTime("2007-1-2 08:12:02"); assertTrue(DateUtils.isTimeAfter(date1, date2)); date1 = parseDateTime("2007-1-2 08:12:02"); date2 = parseDateTime("2007-1-1 08:12:02"); assertFalse(DateUtils.isTimeAfter(date1, date2)); } @Test public void testIsTimeBefore() { Date date1 = parseDateTime("2007-1-1 18:12:02"); Date date2 = parseDateTime("2007-1-2 08:12:02"); assertTrue(DateUtils.isTimeBefore(date2, date1)); date1 = parseDateTime("2007-1-2 08:12:02"); date2 = parseDateTime("2007-1-1 08:12:02"); assertFalse(DateUtils.isTimeBefore(date2, date1)); } @Test public void getWeekDaysBetween() { Date fromDate = DateUtils.parseDate("2009-1-1"); Date toDate = DateUtils.parseDate("2009-2-1"); assertEquals(4, DateUtils.getWeekDaysBetween(fromDate, toDate, Calendar.SUNDAY)); assertEquals(4, DateUtils.getWeekDaysBetween(fromDate, toDate, Calendar.MONDAY)); assertEquals(4, DateUtils.getWeekDaysBetween(fromDate, toDate, Calendar.TUESDAY)); assertEquals(4, DateUtils.getWeekDaysBetween(fromDate, toDate, Calendar.WEDNESDAY)); assertEquals(5, DateUtils.getWeekDaysBetween(fromDate, toDate, Calendar.THURSDAY)); assertEquals(5, DateUtils.getWeekDaysBetween(fromDate, toDate, Calendar.FRIDAY)); assertEquals(5, DateUtils.getWeekDaysBetween(fromDate, toDate, Calendar.SATURDAY)); } @Test public void getFirstWeekdayBetween() { Date fromDate = DateUtils.parseDate("2009-1-1"); Date toDate = DateUtils.parseDate("2009-2-1"); assertEquals(DateUtils.parseDate("2009-1-4"), DateUtils.getFirstWeekdayBetween(fromDate, toDate, Calendar.SUNDAY)); assertEquals(DateUtils.parseDate("2009-1-5"), DateUtils.getFirstWeekdayBetween(fromDate, toDate, Calendar.MONDAY)); assertEquals(DateUtils.parseDate("2009-1-6"), DateUtils.getFirstWeekdayBetween(fromDate, toDate, Calendar.TUESDAY)); assertEquals(DateUtils.parseDate("2009-1-7"), DateUtils.getFirstWeekdayBetween(fromDate, toDate, Calendar.WEDNESDAY)); assertEquals(DateUtils.parseDate("2009-1-1"), DateUtils.getFirstWeekdayBetween(fromDate, toDate, Calendar.THURSDAY)); assertEquals(DateUtils.parseDate("2009-1-2"), DateUtils.getFirstWeekdayBetween(fromDate, toDate, Calendar.FRIDAY)); assertEquals(DateUtils.parseDate("2009-1-3"), DateUtils.getFirstWeekdayBetween(fromDate, toDate, Calendar.SATURDAY)); } @Test public void getDaysInYear() { assertEquals(366, DateUtils.getDaysInYear(2000)); assertEquals(365, DateUtils.getDaysInYear(2009)); } @Test public void getDaysInMonth() { assertEquals(29, DateUtils.getDaysInMonth(2000, Calendar.FEBRUARY)); assertEquals(28, DateUtils.getDaysInMonth(2009, Calendar.FEBRUARY)); assertEquals(31, DateUtils.getDaysInMonth(2009, Calendar.DECEMBER)); } @Test public void testParseDate() { Calendar calendar = Calendar.getInstance(); calendar.setTime(DateUtils.parseDate("1968-4-16")); assertEquals(1968, calendar.get(Calendar.YEAR)); assertEquals(3, calendar.get(Calendar.MONTH)); assertEquals(16, calendar.get(Calendar.DATE)); calendar.setTime(DateUtils.parseDate("1968-04-16")); assertEquals(1968, calendar.get(Calendar.YEAR)); assertEquals(3, calendar.get(Calendar.MONTH)); assertEquals(16, calendar.get(Calendar.DATE)); } @Test public void testParseTime() { Calendar calendar = Calendar.getInstance(); calendar.setTime(DateUtils.parseTime("02:04:06")); assertEquals(2, calendar.get(Calendar.HOUR)); assertEquals(4, calendar.get(Calendar.MINUTE)); assertEquals(6, calendar.get(Calendar.SECOND)); calendar.setTime(DateUtils.parseTime("2:4:6")); assertEquals(2, calendar.get(Calendar.HOUR)); assertEquals(4, calendar.get(Calendar.MINUTE)); assertEquals(6, calendar.get(Calendar.SECOND)); } @Test public void testParseDateTime() { Calendar calendar = Calendar.getInstance(); calendar.setTime(DateUtils.parseDateTime("1968-04-16 02:04:06")); assertEquals(1968, calendar.get(Calendar.YEAR)); assertEquals(3, calendar.get(Calendar.MONTH)); assertEquals(16, calendar.get(Calendar.DATE)); assertEquals(2, calendar.get(Calendar.HOUR)); assertEquals(4, calendar.get(Calendar.MINUTE)); assertEquals(6, calendar.get(Calendar.SECOND)); calendar.setTime(DateUtils.parseDateTime("1968-4-16 2:4:6")); assertEquals(1968, calendar.get(Calendar.YEAR)); assertEquals(3, calendar.get(Calendar.MONTH)); assertEquals(16, calendar.get(Calendar.DATE)); assertEquals(2, calendar.get(Calendar.HOUR)); assertEquals(4, calendar.get(Calendar.MINUTE)); assertEquals(6, calendar.get(Calendar.SECOND)); calendar.setTime(DateUtils.parseDateTime("1968-04-16 2:4:6")); assertEquals(1968, calendar.get(Calendar.YEAR)); assertEquals(3, calendar.get(Calendar.MONTH)); assertEquals(16, calendar.get(Calendar.DATE)); assertEquals(2, calendar.get(Calendar.HOUR)); assertEquals(4, calendar.get(Calendar.MINUTE)); assertEquals(6, calendar.get(Calendar.SECOND)); calendar.setTime(DateUtils.parseDateTime("1968-04-16 2:4:6")); assertEquals(1968, calendar.get(Calendar.YEAR)); assertEquals(3, calendar.get(Calendar.MONTH)); assertEquals(16, calendar.get(Calendar.DATE)); assertEquals(2, calendar.get(Calendar.HOUR)); assertEquals(4, calendar.get(Calendar.MINUTE)); assertEquals(6, calendar.get(Calendar.SECOND)); } @Test public void dateAfter() { Date origDate = DateUtils.parseDate("2000-01-02"); assertEquals(DateUtils.parseDate("2000-01-05"), DateUtils.dateAfter(origDate, 3, Calendar.DATE)); assertEquals(DateUtils.parseDate("2003-01-02"), DateUtils.dateAfter(origDate, 3, Calendar.YEAR)); } @Test public void dateBefore() { Date origDate = DateUtils.parseDate("2000-01-05"); assertEquals(DateUtils.parseDate("2000-01-02"), DateUtils.dateBefore(origDate, 3, Calendar.DATE)); assertEquals(DateUtils.parseDate("1997-01-05"), DateUtils.dateBefore(origDate, 3, Calendar.YEAR)); } }