java8 - ChronoUnit enum class examples
What is ChronoUnit in java?
java.time.temporal.ChronoUnit is an Enumeration class introduced in java8. It is used to measure the time in Years
, Months
, Weeks
, Days
, Hours
, Minutes
, Seconds
, Microseconds
, Nanoseconds
. Before java8, developers used integer values for Days, Weeks, hours, etc. With the java8 version, These integer values represent with ChronoUnit
enumeration constants. It implements the TemporalUnit
interface.
It contains the following constants
- Nanos
- Micros
- Millis
- Seconds
- Minutes
- Hours
- HalfDays
- Days
- Weeks
- Months
- Years
- Decades
- Centuries
- Millennia
- Eras
- Forever
Some of the methods
values(): return the
ChronoUnit
array with enum constantsisDateBased(): It checks checked unit is based on the Date unit
isTimeBased() This check checked unit is based on the time unit
isSupportedBy() if the given unit is supported by the temporal unit
between() method calculate the time between two temporal objects, Time returned in long in measuring unit
isDurationEstimated() returns true or false based on duration estimated unit
getDuration() returns Duration object unit in ISO time units
It use in Date and Time API for calculating below things
- a specific time before
- Specific time after
- Many days, years, months, hours, minutes, seconds between two dates and return range in Units.
ChronoUnit Examples
We will see various use cases of java.time.temporal.ChronoUnit class
Display all ChronoUnits in seconds
It is an example of available ChronoUnit and their measure unit in seconds.
for (ChronoUnit unit : ChronoUnit.values()) {
Duration duration=unit.getDuration();
System.out.println(unit+" is of seconds:"+duration.getSeconds());
}
Output is
Nanos is of seconds:0
Micros is of seconds:0
Millis is of seconds:0
Seconds is of seconds:1
Minutes is of seconds:60
Hours is of seconds:3600
holidays is of seconds:43200
Days is of seconds:86400
Weeks is of seconds:604800
Months is of seconds:2629746
Years is of seconds:31556952
Decades is of seconds:315569520
Centuries is of seconds:3155695200
Millennia is of seconds:31556952000
Eras is of seconds:31556952000000000
Forever is of seconds:9223372036854775807
How to add/subtract to date using ChronoUnit in java?
It is an example of adding and subtracting measure units to LocaldateTime
LocalDateTime now = LocalDateTime.now();
// date time 5 days ago
LocalDateTime localDateTime1 = now.minus(5, ChronoUnit.DAYS);
System.out.println(localDateTime1);
// date time 5 years ago
LocalDateTime localDateTime2 = now.minus(5, ChronoUnit.YEARS);
System.out.println(localDateTime2);
// date time 10 days after
LocalDateTime localDateTime3 = now.plus(5, ChronoUnit.DAYS);
System.out.println(localDateTime3);
// date time 4 months after
LocalDateTime localDateTime4 = now.plus(4, ChronoUnit.MONTHS);
System.out.println(localDateTime4);
The output of the above code execution is
2018-08-22T23:00:36.011362100
2013-08-27T23:00:36.011362100
2018-09-01T23:00:36.011362100
2018-12-27T23:00:36.011362100
How to calculate the number of years between two dates?
It is an example of finding years between two [LocalDate)(/java8-ten-localdate-examples)
objects.
using ChronoUnit.YEARS.between() method returns the number of years in between dates.
LocalDate dob = LocalDate.of(1980, Month.AUGUST, 24);
LocalDate dateNow = LocalDate.now();
long numerOfYears = ChronoUnit.YEARS.between(dob, dateNow);
System.out.println(numerOfYears);
Output is
38
How to calculate the number of days between two dates?
It is an example of finding days between two Localdates. ChronoUnit.DAYS.between() method returns the number of days in between dates.
LocalDate dob = LocalDate.of(1980, Month.AUGUST, 24);
LocalDate dateNow = LocalDate.now();
long numberOfDays = ChronoUnit.DAYS.between(dob, dateNow);
System.out.println(numberOfDays);
Output is
13882
How to get Nano/milli/seconds/minutes/Hours difference between two dates?
It is an example of finding micro time details between two dates. ChronoUnit.between() method with micro details gives all micro time information.
LocalDateTime dateTime = LocalDateTime.of(2017, 1, 1, 0, 0);
LocalDateTime dateTime1 = LocalDateTime.now();
System.out.println("Differnce in Nano seconds" + ChronoUnit.NANOS.between(dateTime, dateTime1));
System.out.println("Differnce in Milli seconds" + ChronoUnit.MILLIS.between(dateTime, dateTime1));
System.out.println("Differnce in seconds" + ChronoUnit.SECONDS.between(dateTime, dateTime1));
System.out.println("Differnce in minutes" + ChronoUnit.MINUTES.between(dateTime, dateTime1));
System.out.println("Differnce in hours" + ChronoUnit.HOURS.between(dateTime, dateTime1));
Output is
Differnce in Nano seconds52184462355462300
Differnce in Milli seconds52184462355
Differnce in seconds52184462
Differnce in minutes869741
Differnce in hours14495
The same example can be written using java.time.Duration java.time.Duration example to get hours/mins/secs/milli/nano between two dates.
java.time.Duration.between() method is used to get micro time details
LocalDateTime dateTime = LocalDateTime.of(2017, 1, 1, 0, 0);
LocalDateTime dateTime1 = LocalDateTime.now();
System.out.println("Differnce in Nano seconds" + java.time.Duration.between(dateTime, dateTime1).getNano());
System.out.println("Differnce in Milli seconds" + java.time.Duration.between(dateTime, dateTime1).toMillis());
System.out.println("Differnce in seconds" + java.time.Duration.between(dateTime, dateTime1).getSeconds());
System.out.println("Differnce in minutes" + java.time.Duration.between(dateTime, dateTime1).toMinutes());
System.out.println("Differnce in hours" + java.time.Duration.between(dateTime, dateTime1).toHours());
Output is
Differnce in Nano seconds156614800
Differnce in Milli seconds52183108156
Differnce in seconds52183108
Differnce in minutes869718
Differnce in hours14495
Conclusion
You learned Chrono unit enumeration object and its methods and examples for calculating time date difference between different temporal objects.