Java Date and Time API. This article explains the date and time API introduced in Java 8.
1. Java 8 Date and Time API introduction
The Java language provides direct support for time-based objects. The Java 8 release contained a new API based on immutable-value classes, which are thread-safe. These classes provide a fluent API for constructing instances of them.
The java.time.LocalDate
and the java.time.LocalTime
classes provide a representation of date and time without timezones.
They represent date and time from the context of an observer, such as a calendar on a desk or a clock on your wall.
java.time.LocalDateTime
represents both a date and a time.
The following snippet demonstrates the usage these classes.
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
public class ExampleLocalDateandTimeCreation {
public static void main(String[] args) {
// The current date and time
LocalDateTime dateTime = LocalDateTime.now();
// from values
LocalDate d1 = LocalDate.of(2015, Month.JULY, 13);
// construct time object based on hours and minutes
LocalTime t1 = LocalTime.of(17, 18);
// create time object based on a String
LocalTime t2 = LocalTime.parse("10:15:30");
// Get the time or date from LocalDateTime
LocalDate date = dateTime.toLocalDate();
Month month = dateTime.getMonth();
int day = dateTime.getDayOfMonth();
int minute = dateTime.getMinute();
// Perform operations on these objects will always return a new object
// as these objects are immutable
LocalDateTime updatedDate = dateTime.withDayOfMonth(13).withYear(2015);
LocalDateTime plusYears = updatedDate.plusDays(25).plusYears(2);
// the API also allow to use Adjusters for the API,
// for example the following will set the day to the last day in the monthd
LocalDateTime newDate = dateTime.with(TemporalAdjusters.lastDayOfMonth());
// You can also truncate certain time units, e.g., remove the seconds from a time
// object
LocalTime truncatedSeconds = t2.truncatedTo(ChronoUnit.SECONDS);
}
}
The java.time.Duration
class can be used to describe durations.
import java.time.Duration;
public class ExampleDuration {
public static void main(String[] args) {
// define a duration of 5 hours
Duration duration = Duration.ofHours(5);
// add 20 minutes
Duration plusMinutes = duration.plusMinutes(20);
}
}
To calculate differences between times you can use the ChronoUnit
class.
import java.time.Instant;
import java.time.temporal.Temporal;
import java.time.temporal.ChronoUnit;
Instant previous, current, gap;
current = Instant.now();
if (previous != null) {
gap = ChronoUnit.MILLIS.between(previous,current);
}
2. Parsing and formatting Dates and Times
The Date
and Time
classes provide the parse
method for parsing a String
.
They also provide the format
method for formating for output.
import java.time.LocalDate;
import java.time.Month;
import java.time.format.DateTimeFormatter;
public class ExampleFormatter {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d yyyy");
// use this format to get always two digits for the day
DateTimeFormatter f1 = DateTimeFormatter.ofPattern("MMM dd yyyy");
LocalDate date = LocalDate.of(2015, Month.JULY, 1);
System.out.println(date.format(formatter));
System.out.println(date.format(f1));
LocalDate d2 = LocalDate.of(2015, Month.JULY, 15);
System.out.println(d2.format(formatter));
}
}
3. Date and Time resources
3.1. vogella Java example code
If you need more assistance we offer Online Training and Onsite training as well as consulting