/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.time; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.fail; import static org.threeten.bp.Month.MARCH; import org.testng.annotations.Test; import org.threeten.bp.Instant; import org.threeten.bp.LocalDate; import org.threeten.bp.LocalDateTime; import org.threeten.bp.ZoneOffset; import org.threeten.bp.ZonedDateTime; import com.opengamma.util.test.TestGroup; /** * Test DateUtils. */ @Test(groups = TestGroup.UNIT) public class DateUtilsTest { private static final double EPS = 1e-9; public void testDifferenceInYears() { final ZonedDateTime startDate = ZonedDateTime.of(LocalDateTime.of(2000, 1, 1, 0, 0), ZoneOffset.UTC); final ZonedDateTime endDate = ZonedDateTime.of(LocalDateTime.of(2001, 1, 1, 0, 0), ZoneOffset.UTC); try { DateUtils.getDifferenceInYears((Instant) null, endDate.toInstant()); fail(); } catch (final IllegalArgumentException e) { // Expected } try { DateUtils.getDifferenceInYears(startDate.toInstant(), (Instant) null); fail(); } catch (final IllegalArgumentException e) { // Expected } final double leapYearDays = 366; assertEquals(DateUtils.getDifferenceInYears(startDate.toInstant(), endDate.toInstant()) * DateUtils.DAYS_PER_YEAR / leapYearDays, 1, EPS); try { DateUtils.getDifferenceInYears(null, endDate.toInstant(), leapYearDays); fail(); } catch (final IllegalArgumentException e) { // Expected } try { DateUtils.getDifferenceInYears(startDate.toInstant(), null, leapYearDays); fail(); } catch (final IllegalArgumentException e) { // Expected } assertEquals(DateUtils.getDifferenceInYears(startDate.toInstant(), endDate.toInstant(), leapYearDays), 1, EPS); } public void testDateOffsetWithYearFraction() { final ZonedDateTime startDate = ZonedDateTime.of(LocalDateTime.of(2001, 1, 1, 0, 0), ZoneOffset.UTC); final ZonedDateTime offsetDateWithFinancialYearDefinition = ZonedDateTime.of(LocalDateTime.of(2002, 1, 1, 6, 0), ZoneOffset.UTC); final ZonedDateTime endDate = ZonedDateTime.of(LocalDateTime.of(2002, 1, 1, 0, 0), ZoneOffset.UTC); final double daysPerYear = 365; try { DateUtils.getDateOffsetWithYearFraction((Instant) null, 1); fail(); } catch (final IllegalArgumentException e) { // Expected } try { DateUtils.getDateOffsetWithYearFraction((ZonedDateTime) null, 1); fail(); } catch (final IllegalArgumentException e) { // Expected } try { DateUtils.getDateOffsetWithYearFraction((Instant) null, 1, daysPerYear); fail(); } catch (final IllegalArgumentException e) { // Expected } try { DateUtils.getDateOffsetWithYearFraction((ZonedDateTime) null, 1, daysPerYear); fail(); } catch (final IllegalArgumentException e) { // Expected } assertEquals(DateUtils.getDateOffsetWithYearFraction(startDate.toInstant(), 1), offsetDateWithFinancialYearDefinition.toInstant()); assertEquals(DateUtils.getDateOffsetWithYearFraction(startDate, 1), offsetDateWithFinancialYearDefinition); assertEquals(DateUtils.getDateOffsetWithYearFraction(startDate.toInstant(), 1, daysPerYear), endDate.toInstant()); assertEquals(DateUtils.getDateOffsetWithYearFraction(startDate, 1, daysPerYear), endDate); } public void testUTCDate() { final int year = 2009; final int month = 9; final int day = 1; ZonedDateTime date = DateUtils.getUTCDate(year, month, day); assertEquals(date.getYear(), year); assertEquals(date.getMonthValue(), month); assertEquals(date.getDayOfMonth(), day); assertEquals(date.getHour(), 0); assertEquals(date.getMinute(), 0); assertEquals(date.getZone(), ZoneOffset.UTC); final int hour = 6; final int minutes = 31; date = DateUtils.getUTCDate(year, month, day, hour, minutes); assertEquals(date.getYear(), year); assertEquals(date.getMonthValue(), month); assertEquals(date.getDayOfMonth(), day); assertEquals(date.getHour(), hour); assertEquals(date.getMinute(), minutes); assertEquals(date.getZone(), ZoneOffset.UTC); } public void testDateInTimeZone() { // TODO don't know how to create time zones } public void testExactDaysBetween() { // TODO don't know how to create time zones // final ZonedDateTime startDate = DateUtil.getDateInTimeZone(2000, 1, 1, 0, // 0, "Europe/London"); // final ZonedDateTime endDate = DateUtil.getDateInTimeZone(2001, 1, 1, 0, // 0, "Europe/Paris"); // try { // DateUtil.getExactDaysBetween(null, endDate); // fail(); // } catch (final IllegalArgumentException e) { // Expected // } // try { // DateUtil.getExactDaysBetween(startDate, null); // fail(); // } catch (final IllegalArgumentException e) { // Expected // } } public void testDaysBetween() { final ZonedDateTime startDate = DateUtils.getUTCDate(2008, 1, 1); final ZonedDateTime endDate = DateUtils.getUTCDate(2009, 1, 1); assertEquals(DateUtils.getDaysBetween(startDate, false, endDate, false), 365); assertEquals(DateUtils.getDaysBetween(startDate, true, endDate, false), 366); assertEquals(DateUtils.getDaysBetween(startDate, false, endDate, true), 366); assertEquals(DateUtils.getDaysBetween(startDate, true, endDate, true), 367); assertEquals(DateUtils.getDaysBetween(startDate, endDate), 366); } public void testPrintYYYYMMDD() { final int year = 2009; final int month = 9; final int day = 1; ZonedDateTime date = DateUtils.getUTCDate(year, month, day); assertEquals("20090901", DateUtils.printYYYYMMDD(date)); try { DateUtils.printYYYYMMDD(null); fail(); } catch (final IllegalArgumentException e) { //Expected } } public void testPrintMMDD() { LocalDate test = LocalDate.of(2010, 1, 1); assertEquals("01-01", DateUtils.printMMDD(test)); try { DateUtils.printMMDD(null); fail(); } catch (final IllegalArgumentException e) { //Expected } } public void testPreviousWeekDay() { LocalDate sun = LocalDate.of(2009, 11, 8); LocalDate sat = LocalDate.of(2009, 11, 7); LocalDate fri = LocalDate.of(2009, 11, 6); LocalDate thur = LocalDate.of(2009, 11, 5); LocalDate wed = LocalDate.of(2009, 11, 4); LocalDate tue = LocalDate.of(2009, 11, 3); LocalDate mon = LocalDate.of(2009, 11, 2); LocalDate lastFri = LocalDate.of(2009, 10, 30); assertEquals(fri, DateUtils.previousWeekDay(sun)); assertEquals(fri, DateUtils.previousWeekDay(sat)); assertEquals(thur, DateUtils.previousWeekDay(fri)); assertEquals(wed, DateUtils.previousWeekDay(thur)); assertEquals(tue, DateUtils.previousWeekDay(wed)); assertEquals(mon, DateUtils.previousWeekDay(tue)); assertEquals(lastFri, DateUtils.previousWeekDay(mon)); } public void testNextWeekDay() { LocalDate sun = LocalDate.of(2009, 11, 8); LocalDate sat = LocalDate.of(2009, 11, 7); LocalDate fri = LocalDate.of(2009, 11, 6); LocalDate thur = LocalDate.of(2009, 11, 5); LocalDate wed = LocalDate.of(2009, 11, 4); LocalDate tue = LocalDate.of(2009, 11, 3); LocalDate mon = LocalDate.of(2009, 11, 2); LocalDate nextMon = LocalDate.of(2009, 11, 9); assertEquals(nextMon, DateUtils.nextWeekDay(sun)); assertEquals(nextMon, DateUtils.nextWeekDay(sat)); assertEquals(nextMon, DateUtils.nextWeekDay(fri)); assertEquals(fri, DateUtils.nextWeekDay(thur)); assertEquals(thur, DateUtils.nextWeekDay(wed)); assertEquals(wed, DateUtils.nextWeekDay(tue)); assertEquals(tue, DateUtils.nextWeekDay(mon)); } public void testToLocalDate() { LocalDate D20100328 = LocalDate.of(2010, MARCH, 28); LocalDate localDate = DateUtils.toLocalDate(20100328); assertEquals(D20100328, localDate); } }