@Test
  public void testInstant() {
    // millisec since epoch
    long timestamp = System.currentTimeMillis();

    // point in time - now!
    Instant instant = Instant.now();
    long secEpoch = instant.getEpochSecond();

    // missing milli so divide by 1000
    Assert.assertEquals(timestamp / 1000, secEpoch);
    Assert.assertEquals(instant.getLong(ChronoField.INSTANT_SECONDS), secEpoch);

    Instant timestampInstant = Instant.ofEpochMilli(timestamp);
    Assert.assertEquals(timestamp, timestampInstant.truncatedTo(ChronoUnit.MILLIS).toEpochMilli());

    // different ways to go into the future
    Instant future1 = instant.plusMillis(1000);
    Instant future2 = instant.plus(1000, ChronoUnit.MILLIS);
    // add Duration instead of Period as this example is dealing with time
    Instant future3 = instant.plus(Duration.ofMillis(1000));
    Instant future4 = instant.plus(Duration.of(1000, ChronoUnit.MILLIS));

    // all futures are the same!
    Assert.assertEquals(future1, future2);
    Assert.assertEquals(future2, future3);
    Assert.assertEquals(future3, future4);
  }
  @Override
  public boolean test(final Object ignore) {
    if (_start == Instant.MIN) {
      _start = _clock.instant();
    }

    return _start.plus(_duration).isAfter(_clock.instant());
  }
 /**
  * @param newUid the newly scanned UID
  * @param oldUid the previously scanned code
  * @param lastScan the time of the last successful scan
  * @return Return true if the card is different OR if the previous card was scanned over 1 second
  *     before
  */
 private boolean isNewCard(String newUid, String oldUid, Instant lastScan) {
   return !newUid.equals(oldUid)
       || lastScan == null
       || (lastScan != null && lastScan.plus(1250, ChronoUnit.MILLIS).isBefore(Instant.now()));
 }