Java LocalTime Class
Last modified: April 16, 2025
The java.time.LocalTime
class represents a time without a date or
time-zone. It stores hours, minutes, seconds, and nanoseconds. LocalTime is
immutable and thread-safe, making it ideal for time-only representations.
LocalTime
is commonly used for storing business hours, event times,
or any scenario where only the time portion matters. It provides precision up to
nanoseconds and follows the 24-hour clock format. The class cannot represent
time zones or dates.
LocalTime Class Overview
LocalTime
provides methods to create, parse, and manipulate times.
Key operations include getting time components, comparing times, and performing
arithmetic. The class handles time in hours, minutes, seconds, and nanoseconds.
public final class LocalTime implements Temporal, TemporalAdjuster, Comparable<LocalTime>, Serializable { public static LocalTime now(); public static LocalTime of(int hour, int minute); public static LocalTime of(int hour, int minute, int second); public static LocalTime of(int hour, int minute, int second, int nanoOfSecond); public static LocalTime parse(CharSequence text); public int getHour(); public int getMinute(); public int getSecond(); public int getNano(); public boolean isAfter(LocalTime other); public boolean isBefore(LocalTime other); public LocalTime plusHours(long hours); public LocalTime plusMinutes(long minutes); public LocalTime minusHours(long hours); public LocalTime minusMinutes(long minutes); }
The code above shows key methods provided by LocalTime
. These methods
allow creating, comparing, and manipulating times. The class provides precision
up to nanoseconds while maintaining simple time-only representation.
Creating LocalTime Objects
LocalTime objects can be created in several ways. The most common methods are
now
for current time and factory methods for specific times.
Parsing from strings is also supported.
package com.zetcode; import java.time.LocalTime; public class Main { public static void main(String[] args) { // Current time LocalTime now = LocalTime.now(); System.out.println("Current time: " + now); // Specific time LocalTime lunchTime = LocalTime.of(12, 30); System.out.println("Lunch time: " + lunchTime); // With seconds LocalTime preciseTime = LocalTime.of(14, 15, 30); System.out.println("Precise time: " + preciseTime); // With nanoseconds LocalTime nanoTime = LocalTime.of(16, 45, 30, 123456789); System.out.println("Nanosecond time: " + nanoTime); // From string LocalTime parsed = LocalTime.parse("23:59:59"); System.out.println("Parsed from string: " + parsed); } }
This example demonstrates different ways to create LocalTime objects. The output
shows times in ISO-8601 format (HH:mm:ss.nnn). The now
method
captures the current system time with available precision.
Getting Time Components
A LocalTime can be decomposed into its hour, minute, second, and nanosecond components. These methods allow accessing individual parts of the time for display or calculations.
package com.zetcode; import java.time.LocalTime; public class Main { public static void main(String[] args) { LocalTime time = LocalTime.of(15, 45, 30, 123456789); // Get components int hour = time.getHour(); int minute = time.getMinute(); int second = time.getSecond(); int nano = time.getNano(); System.out.println("Hour: " + hour); System.out.println("Minute: " + minute); System.out.println("Second: " + second); System.out.println("Nanosecond: " + nano); // Convert to seconds of day int secondsOfDay = time.toSecondOfDay(); System.out.println("Seconds since midnight: " + secondsOfDay); } }
This example shows how to extract components from a LocalTime. The
toSecondOfDay
method converts the time to seconds since midnight.
This is useful for time-based calculations and comparisons.
Comparing Times
LocalTime objects can be compared to determine chronological order. The class
provides isBefore
, isAfter
, and compareTo
methods. These comparisons are essential for time-based logic.
package com.zetcode; import java.time.LocalTime; public class Main { public static void main(String[] args) { LocalTime morning = LocalTime.of(9, 0); LocalTime afternoon = LocalTime.of(14, 30); LocalTime evening = LocalTime.of(20, 0); System.out.println("Morning before afternoon: " + morning.isBefore(afternoon)); System.out.println("Evening after afternoon: " + evening.isAfter(afternoon)); System.out.println("Comparison result: " + morning.compareTo(evening)); // Equality check LocalTime sameAsMorning = LocalTime.of(9, 0); System.out.println("Morning equals same time: " + morning.equals(sameAsMorning)); } }
This example demonstrates various ways to compare LocalTime objects. The comparison methods consider all time components. Note that equality requires all components (including nanoseconds) to match exactly.
Adding and Subtracting Time
LocalTime supports temporal arithmetic through plus
and
minus
methods. These operations are useful for calculating future
or past times. The class handles overflow automatically (24-hour wrap-around).
package com.zetcode; import java.time.LocalTime; import java.time.temporal.ChronoUnit; public class Main { public static void main(String[] args) { LocalTime now = LocalTime.of(10, 30); // Add hours LocalTime later = now.plusHours(2); System.out.println("Two hours later: " + later); // Subtract minutes LocalTime earlier = now.minusMinutes(45); System.out.println("Forty-five minutes earlier: " + earlier); // Add using ChronoUnit LocalTime nextHour = now.plus(1, ChronoUnit.HOURS); System.out.println("Next hour: " + nextHour); // Wrap-around midnight LocalTime lateNight = LocalTime.of(23, 0).plusHours(2); System.out.println("After midnight: " + lateNight); } }
This example shows various ways to perform temporal arithmetic with LocalTime. Operations can use specific unit methods or ChronoUnit constants. All calculations handle midnight wrap-around automatically.
Formatting and Parsing
LocalTime can be formatted and parsed using DateTimeFormatter. This allows custom display formats and flexible input parsing. The ISO-8601 format is used by default.
package com.zetcode; import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { LocalTime time = LocalTime.of(16, 45, 30); // Default format String defaultFormat = time.toString(); System.out.println("Default format: " + defaultFormat); // Custom formatting DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a"); String customFormat = time.format(formatter); System.out.println("Custom format: " + customFormat); // Parsing custom format DateTimeFormatter parser = DateTimeFormatter.ofPattern("H.mm"); LocalTime parsedTime = LocalTime.parse("14.30", parser); System.out.println("Parsed time: " + parsedTime); } }
This example demonstrates formatting and parsing LocalTime objects. The DateTimeFormatter provides flexible pattern-based formatting. Parsing supports both standard and custom formats.
Time Range Operations
LocalTime provides methods to check if a time falls within certain ranges or meets specific conditions. These operations are useful for time-based business rules and validations.
package com.zetcode; import java.time.LocalTime; public class Main { public static void main(String[] args) { LocalTime businessStart = LocalTime.of(9, 0); LocalTime businessEnd = LocalTime.of(17, 0); LocalTime currentTime = LocalTime.now(); // Check if within business hours boolean isBusinessHours = !currentTime.isBefore(businessStart) && currentTime.isBefore(businessEnd); System.out.println("Is business hours: " + isBusinessHours); // Check if midnight boolean isMidnight = currentTime.equals(LocalTime.MIDNIGHT); System.out.println("Is midnight: " + isMidnight); // Check if AM or PM boolean isAM = currentTime.getHour() < 12; System.out.println("Is AM: " + isAM); // Get min/max of two times LocalTime earliest = LocalTime.min(businessStart, currentTime); System.out.println("Earliest time: " + earliest); } }
This example shows various range and condition checks with LocalTime. The
isBefore
and isAfter
methods are particularly useful
for range checks. Constants like MIDNIGHT
provide common reference
points.
Source
Java LocalTime Class Documentation
In this article, we've covered the essential methods and features of the Java LocalTime class. Understanding these concepts is crucial for accurate time-only representations in Java applications.
Author
List all Java tutorials.