How to compare two instants in Java?

Viewed 13422

I want comparison two Instants to see if equals both or greater than, but i can’t. i dont know. how i can compare instants?

  private Instant expiration;

 if(expiration()==Instant.now()||expiration()>Instant.now())
  {
     valid+="the Expire date is invalid check it . ";
  }

i try this way but i have compile error. but i think cant comparison in this way it must change instant to String and compare after it but i dont know how to format to string

3 Answers

Don't convert them to Strings. Instant, like every other Comparable type, has the compareTo method. Use it like this:

if (expiration.compareTo(Instant.now()) >= 0) {
  ...
}

Posting comments by chrylis-cautiouslyoptimistic as an answer to highlight


Instant also has more semantically meaningful methods isAfter and isBefore

if (now().isAfter(expiration)) {
  .. do something ..
}

As pointed out by @Louis Wasserman **

  • Note that isAfter doesn't represent >=, it represents >
  • You could work around that, e.g. with !isBefore or || equals

Following the implementation of compareTo method of Instant class:

@Override
public int compareTo(Instant otherInstant) {
    int cmp = Long.compare(seconds, otherInstant.seconds);
    if (cmp != 0) {
        return cmp;
    }
    return nanos - otherInstant.nanos;
}
Related