@DataProvider(name = "sampleDateTimes")
  Iterator<Object[]> provider_sampleDateTimes() {

    return new Iterator<Object[]>() {

      Object[][] sampleDates = provider_sampleDates();

      Object[][] sampleTimes = provider_sampleTimes();

      int datesIndex = 0;

      int timesIndex = 0;

      @Override
      public boolean hasNext() {

        return this.datesIndex < this.sampleDates.length;
      }

      @Override
      public Object[] next() {

        Object[] sampleDate = this.sampleDates[this.datesIndex];
        Object[] sampleTime = this.sampleTimes[this.timesIndex];

        Object[] ret = new Object[sampleDate.length + sampleTime.length];

        System.arraycopy(sampleDate, 0, ret, 0, sampleDate.length);
        System.arraycopy(sampleTime, 0, ret, sampleDate.length, sampleTime.length);

        if (++this.timesIndex == this.sampleTimes.length) {
          this.datesIndex++;
          this.timesIndex = 0;
        }

        return ret;
      }

      @Override
      public void remove() {

        throw new UnsupportedOperationException();
      }
    };
  }

  @Test(dataProvider = "sampleDateTimes", groups = { "tck" }