Java 8 Date and time API: the LocalDateTime class
December 28, 2014 Leave a comment
Introduction
In this post we saw how to represent dates on the level of days, such as 2014-10-05 using the LocalDate class. This post discussed the usage of LocalTime to show the point of time within the 24-hr clock, such as 11:45:43.
LocalDate has no concept of time units below the day level. LocalTime has no concept of time above the level of hours. However, what if you need to represent the date as 2014-10-05 11:45:43, i.e. with both the day and time sections? You can turn to the aptly named LocalDateTime class which marries LocalTime and LocalDate.
The usage of LocalDateTime is very similar to both LocalDate and LocalTime. You can quickly read through the posts referenced above for further information. Most date-related methods are common for LocalDate, LocalTime and LocalDateTime.
LocalDateTime
You can get the current local date-time as follows:
LocalDateTime now = LocalDateTime.now();
This will get the current date according to the default time zone of your computer.
You can construct a new LocalDateTime instance using the various static “of” methods, e.g.
LocalDateTime someDateInPast = LocalDateTime.of(2014, Month.MAY, 23, 10, 23, 43);
You can add/subtract some units of time using the “plus” and “minus” methods. The “until” method will find the time span between the two time points in the provided unit of measurement:
LocalDateTime later = now.plusMinutes(321); long until = now.until(later, ChronoUnit.MINUTES);
“until” will be 321 minutes as expected.
We saw that in the case of LocalDate and LocalTime not all enumeration types of ChronoUnit are supported which is due to the allowed level of granularity. LocalDateTime allows for all values in the enumeration, from nanoseconds to eras – defined as 1 billion years in Java 8, i.e. you can measure the difference between two LocalDateTime instances in terms of nanoseconds ranging to eras – as long as the “long” type supports them which might not be the case with nanoseconds given a large enough time range.
The isAfter and isBefore methods work as the method names imply:
LocalDateTime now = LocalDateTime.now(); LocalDateTime someDateInPast = LocalDateTime.of(2014, Month.MAY, 23, 10, 23, 43); boolean before = now.isBefore(later); boolean after = now.isAfter(later);
“before” will be true and “after” will be false as expected.
You can extract the LocalDate and LocalTime portions of LocalDateTime using the toLocalDate and toLocalTime methods:
LocalDate toLocalDate = now.toLocalDate(); LocalTime toLocalTime = now.toLocalTime();
You can extract the various portions of the LocalDateTime instance using the various “get” methods, such as:
LocalDateTime someDateInPast = LocalDateTime.of(2014, Month.MAY, 23, 10, 23, 43); DayOfWeek dayOfWeek = someDateInPast.getDayOfWeek(); int dayOfYear = someDateInPast.getDayOfYear(); int year = someDateInPast.getYear();
The returned values are “FRIDAY”, 143 – i.e. the date in someDateInPast was the 143rd day in the year of 2014 -, and 2014 respectively.
View all posts related to Java here.