Java LocalDateTime
last modified July 8, 2023
In this article we show how to work with LocalDateTime in Java.
Java LocalDateTime
LocalDateTime is an immutable date-time object that represents a date-time. It is a date-time without a time-zone in the ISO-8601 calendar system.
LocalDateTime
does not store or represent a time-zone. It cannot
represent an instant on the time-line without additional information such as an
offset or time-zone. Value 2022-10-27T11:01:19.031990446 is an example of a
LocalDateTime
.
Java LocalDateTime current time
The current time is retrived with LocalDateTime.now
.
package com.zetcode; import java.time.LocalDateTime; public class LocalDateTimeEx { public static void main(String[] args) { var now = LocalDateTime.now(); System.out.println(now); } }
The example prints the current local datetime value.
2022-10-27T11:35:12.339662147
Java LocalDateTime create
The are several ways to create LocalDateTime
.
package com.zetcode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class LocalDateTimeEx { public static void main(String[] args) { var now = LocalDateTime.now(); System.out.println(now); LocalDateTime dt1 = LocalDateTime.of(2022, 10, 27, 10, 40, 55); System.out.println(dt1); LocalDateTime dt2 = LocalDateTime.parse("2020-11-27T11:20:50", DateTimeFormatter.ISO_LOCAL_DATE_TIME); System.out.println(dt2); } }
The program creates three datetime objects.
var now = LocalDateTime.now();
The current datetime is created with LocalDateTime.now
.
LocalDateTime dt1 = LocalDateTime.of(2022, 10, 27, 10, 40, 55);
Here a localdatetime value is created with LocalDateTime.of
.
We specify the year, month, day, hour, and second parts.
LocalDateTime dt2 = LocalDateTime.parse("2020-11-27T11:20:50", DateTimeFormatter.ISO_LOCAL_DATE_TIME);
A localdatetime value is parsed from a string.
2022-10-27T11:33:07.248725811 2022-10-27T10:40:55 2020-11-27T11:20:50
Java LocalDateTime parts
In the next example, we get the current LocalDateTime
value parts.
package com.zetcode; import java.time.LocalDateTime; public class LocalDateTimeEx { public static void main(String[] args) { LocalDateTime dt = LocalDateTime.now(); System.out.printf("Year: %s%n", dt.getYear()); System.out.printf("Month: %s%n", dt.getMonth()); System.out.printf("Day of month: %s%n", dt.getDayOfMonth()); System.out.printf("Hour: %s%n", dt.getHour()); System.out.printf("Minute: %s%n", dt.getMinute()); System.out.printf("Second: %s%n", dt.getSecond()); } }
The getYear
gets the year part, the getMonth
the month
part, the getDayOfMonth
gets the day of the month.
The getHour
gets the hour part, the getMinute
gets the minute part, and the getSecond
the second part.
Year: 2022 Month: OCTOBER Day of month: 27 Hour: 11 Minute: 44 Second: 13
Java LocalDateTime format
The datetime is formatted differently in various countries.
DateTimeFormatter
helps us format the datetime.
package com.zetcode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; public class LocalDateTimeEx { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME; System.out.println(now.format(dtf)); DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy HH:mm:ss a"); System.out.println(now.format(dtf2)); DateTimeFormatter dtf3 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); System.out.println(now.format(dtf3)); } }
The example uses DateTimeFormatter
to format time.
DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME; System.out.println(now.format(dtf));
We format the time to the ISO format time standart.
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy HH:mm:ss a");
We can choose a specific time format with DateTimeFormatter.ofPattern
.
The documentation to DateTimeFormatter
contains the description
of various formatting characters that we can use.
DateTimeFormatter dtf3 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
Here we use the FormatStyle.MEDIUM
format.
12:31:48.14020717 Thursday, Oct 27, 2022 12:31:48 PM Oct 27, 2022, 12:31:48 PM
Java LocalTime arithmetic
Java LocalDateTimeEx
has methods for doing datetime arithmetics.
package com.zetcode; import java.time.LocalDateTime; public class LocalDateTimeEx { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); System.out.println(now); // LocalDateTime addition System.out.println("Adding 4 years: " + now.plusYears(4)); System.out.println("Adding 11 months: " + now.plusMonths(11)); System.out.println("Adding 54 days: " + now.plusDays(54)); System.out.println("Adding 3 hours: " + now.plusHours(3)); System.out.println("Adding 30 minutes: " + now.plusMinutes(30)); System.out.println("Adding 45 seconds: " + now.plusSeconds(45)); System.out.println("Adding 40000 nanoseconds: " + now.plusNanos(40000)); System.out.println("-------------------------------------"); // LocalDateTime subtraction System.out.println("Subtracting 4 years: " + now.minusYears(4)); System.out.println("Subtracting 11 months: " + now.minusMonths(11)); System.out.println("Subtracting 54 days: " + now.minusDays(54)); System.out.println("Subtracting 3 hours: " + now.minusHours(3)); System.out.println("Subtracting 30 minutes: " + now.minusMinutes(30)); System.out.println("Subtracting 45 seconds: " + now.minusSeconds(45)); System.out.println("Subtracting 40000 nanoseconds: " + now.minusNanos(40000)); } }
The example presents method for adding and subtracting datetime units.
System.out.println("Adding 3 hours: " + localTime.plusHours(3));
The plusHours
adds three hours to the current local time.
System.out.println("Subtracting 3 hours: " + now.minusHours(3));
Likewise, the minusHours
subtracts three hours from the
current local time.
2022-10-27T12:12:13.895367393 Adding 4 years: 2026-10-27T12:12:13.895367393 Adding 11 months: 2023-09-27T12:12:13.895367393 Adding 54 days: 2022-12-20T12:12:13.895367393 Adding 3 hours: 2022-10-27T15:12:13.895367393 Adding 30 minutes: 2022-10-27T12:42:13.895367393 Adding 45 seconds: 2022-10-27T12:12:58.895367393 Adding 40000 nanoseconds: 2022-10-27T12:12:13.895407393 ------------------------------------- Subtracting 4 years: 2018-10-27T12:12:13.895367393 Subtracting 11 months: 2021-11-27T12:12:13.895367393 Subtracting 54 days: 2022-09-03T12:12:13.895367393 Subtracting 3 hours: 2022-10-27T09:12:13.895367393 Subtracting 30 minutes: 2022-10-27T11:42:13.895367393 Subtracting 45 seconds: 2022-10-27T12:11:28.895367393 Subtracting 40000 nanoseconds: 2022-10-27T12:12:13.895327393
Java LocalTime until
With the until
method, we can compute the time until another time
in terms of the specified unit.
package com.zetcode; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; public class LocalDateTimeEx { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); LocalDateTime xmas = LocalDateTime.of(now.getYear(), 12, 24, 0, 0 ,0); System.out.println(now); System.out.println(xmas); System.out.printf("%s hours%n", now.until(xmas, ChronoUnit.HOURS)); System.out.printf("%s minutes%n", now.until(xmas, ChronoUnit.MINUTES)); System.out.printf("%s seconds%n", now.until(xmas, ChronoUnit.SECONDS)); } }
The example calculates the time that has to elapse until another time in hours, minutes and seconds.
System.out.printf("%s hours%n", now.until(time, ChronoUnit.HOURS));
With ChronoUnit.HOURS
, we specify that we calculate the the time
difference in hours.
2022-10-27T12:13:37.464995847 2022-12-24T00:00 1379 hours 82786 minutes 4967182 seconds
Java LocalTime isBefore/isAfter
We can check if a datetime value is before or after another datetime value with
isBefore
and isAfter
.
package com.zetcode; import java.time.LocalDateTime; public class LocalDateTimeEx { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); LocalDateTime dt1 = now.plusYears(3); LocalDateTime dt2 = now.minusYears(3); if (dt1.isAfter(now)) { System.out.printf("%s is after %s%n", dt1, now); } if (dt2.isBefore(now)) { System.out.printf("%s is before %s%n", dt2, now); } } }
The program uses the isBefore
and isAfter
methods to
check the current datetime value against two other datetimes.
2025-10-27T12:25:45.261416509 is after 2022-10-27T12:25:45.261416509 2019-10-27T12:25:45.261416509 is before 2022-10-27T12:25:45.261416509
Java LocalDateTime truncate
The LocalDateTime's
truncatedTo
method returns a copy
of a local time with the time truncated. It returns a copy of the original
date-time with fields smaller than the specified unit set to zero.
package com.zetcode; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; public class LocalDateTimeEx { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); System.out.println(now); System.out.println(now.truncatedTo(ChronoUnit.HALF_DAYS)); System.out.println(now.truncatedTo(ChronoUnit.HOURS)); System.out.println(now.truncatedTo(ChronoUnit.MINUTES)); System.out.println(now.truncatedTo(ChronoUnit.SECONDS)); System.out.println(now.truncatedTo(ChronoUnit.MICROS)); } }
The example uses truncatedTo
to truncate time to
half days, hours, minutes, seconds, and micros.
2022-10-27T11:49:32.109348052 2022-10-27T00:00 2022-10-27T11:00 2022-10-27T11:49 2022-10-27T11:49:32 2022-10-27T11:49:32.109348
In this article we have worked with Java LocalDateTime.
Author
List all Java tutorials.