@Test
  public void testLANG815() {
    final Calendar calendar = Calendar.getInstance();
    calendar.set(2012, 6, 30, 0, 0, 0);
    final long startMillis = calendar.getTimeInMillis();

    calendar.set(2012, 8, 8);
    final long endMillis = calendar.getTimeInMillis();

    assertEquals("1 9", DurationFormatUtils.formatPeriod(startMillis, endMillis, "M d"));
  }
  @Test
  public void testFormatPeriodISO() {
    final TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
    final Calendar base = Calendar.getInstance(timeZone);
    base.set(1970, 0, 1, 0, 0, 0);
    base.set(Calendar.MILLISECOND, 0);

    final Calendar cal = Calendar.getInstance(timeZone);
    cal.set(2002, 1, 23, 9, 11, 12);
    cal.set(Calendar.MILLISECOND, 1);
    String text;
    // repeat a test from testDateTimeISO to compare extended and not extended.
    text = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(cal);
    assertEquals("2002-02-23T09:11:12-03:00", text);
    // test fixture is the same as above, but now with extended format.
    text =
        DurationFormatUtils.formatPeriod(
            base.getTime().getTime(),
            cal.getTime().getTime(),
            DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN,
            false,
            timeZone);
    assertEquals("P32Y1M22DT9H11M12.001S", text);
    // test fixture from example in http://www.w3.org/TR/xmlschema-2/#duration
    cal.set(1971, 1, 3, 10, 30, 0);
    cal.set(Calendar.MILLISECOND, 0);
    text =
        DurationFormatUtils.formatPeriod(
            base.getTime().getTime(),
            cal.getTime().getTime(),
            DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN,
            false,
            timeZone);
    assertEquals("P1Y1M2DT10H30M0.000S", text);
    // want a way to say 'don't print the seconds in format()' or other fields for that matter:
    // assertEquals("P1Y2M3DT10H30M", text);
  }
 private void assertEqualDuration(
     final String message,
     final String expected,
     final int[] start,
     final int[] end,
     final String format) {
   final Calendar cal1 = Calendar.getInstance();
   cal1.set(start[0], start[1], start[2], start[3], start[4], start[5]);
   cal1.set(Calendar.MILLISECOND, 0);
   final Calendar cal2 = Calendar.getInstance();
   cal2.set(end[0], end[1], end[2], end[3], end[4], end[5]);
   cal2.set(Calendar.MILLISECOND, 0);
   final long milli1 = cal1.getTime().getTime();
   final long milli2 = cal2.getTime().getTime();
   final String result = DurationFormatUtils.formatPeriod(milli1, milli2, format);
   if (message == null) {
     assertEquals(expected, result);
   } else {
     assertEquals(message, expected, result);
   }
 }
  @Test
  public void testFormatPeriod() {
    final Calendar cal1970 = Calendar.getInstance();
    cal1970.set(1970, 0, 1, 0, 0, 0);
    cal1970.set(Calendar.MILLISECOND, 0);
    final long time1970 = cal1970.getTime().getTime();

    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "y"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "M"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "d"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "H"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "m"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "s"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "S"));
    assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "SSSS"));
    assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyyy"));
    assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyMM"));

    long time = time1970 + 60 * 1000;
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "y"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "M"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "d"));
    assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "H"));
    assertEquals("1", DurationFormatUtils.formatPeriod(time1970, time, "m"));
    assertEquals("60", DurationFormatUtils.formatPeriod(time1970, time, "s"));
    assertEquals("60000", DurationFormatUtils.formatPeriod(time1970, time, "S"));
    assertEquals("01:00", DurationFormatUtils.formatPeriod(time1970, time, "mm:ss"));

    final Calendar cal = Calendar.getInstance();
    cal.set(1973, 6, 1, 0, 0, 0);
    cal.set(Calendar.MILLISECOND, 0);
    time = cal.getTime().getTime();
    assertEquals("36", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
    assertEquals(
        "3 years 6 months",
        DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
    assertEquals("03/06", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));

    cal.set(1973, 10, 1, 0, 0, 0);
    cal.set(Calendar.MILLISECOND, 0);
    time = cal.getTime().getTime();
    assertEquals("310", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
    assertEquals(
        "3 years 10 months",
        DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
    assertEquals("03/10", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));

    cal.set(1974, 0, 1, 0, 0, 0);
    cal.set(Calendar.MILLISECOND, 0);
    time = cal.getTime().getTime();
    assertEquals("40", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
    assertEquals(
        "4 years 0 months",
        DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
    assertEquals("04/00", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
    assertEquals("48", DurationFormatUtils.formatPeriod(time1970, time, "M"));
    assertEquals("48", DurationFormatUtils.formatPeriod(time1970, time, "MM"));
    assertEquals("048", DurationFormatUtils.formatPeriod(time1970, time, "MMM"));
  }