Lớp java.time.LocalTime

Lớp LocalTime trong gói java.time của Java được sử dụng để biểu diễn thời gian trong ngày theo lịch ISO-8601, chẳng hạn như "10:15:30". Nó là một đối tượng thời gian không đổi (immutable) và lưu trữ thông tin giờ, phút, giây, thậm chí có thể chính xác đến nano giây. Ví dụ, giá trị "13:45:30.123456789" có thể được lưu trữ trong một LocalTime.

Ⅰ. Đặc điểm của lớp LocalTime

Không lưu trữ hoặc biểu diễn thời gian hay múi giờ.

Thích hợp để lưu trữ thời gian đơn lẻ như giờ họp hoặc giờ mở cửa hàng.

Không thể biểu diễn một thời điểm cụ thể mà cần thêm thông tin như sự lệch chuẩn hoặc múi giờ.

Giả sử tất cả các hệ thống lịch sử dụng cùng một biểu diễn (giờ trong ngày) như LocalTime.

Là lớp bất biến (immutable), các phép toán dựa trên sự so sánh bằng (==) hoặc sử dụng hash code không nên được áp dụng cho LocalTime. Bạn nên sử dụng phương thức equals để so sánh hai thời gian.

An toàn cho nhiều luồng (thread-safe).

Tóm lại, LocalTime là một lớp hữu ích để làm việc với thời gian trong ngày theo lịch ISO-8601 mà không cần quan tâm đến ngày hay múi giờ.

Ⅱ. Khai báo lớp LocalTime trong Java

Để sử dụng lớp LocalTime và các lớp khác trong gói java.time, bạn cần thêm câu lệnh import vào đầu file Java của mình.

Cú pháp câu lệnh import:

Cú pháp

import java.time.LocalTime;

Cú pháp khai báo lớp LocalTime:

Cú pháp

public final class LocalTime 
extends Object   
implements Temporal,TemporalAdjuster, Comparable<LocalTime>, Serializable  

Dưới đây là giải thích chi tiết về cú pháp khai báo này:

↳ public: Lớp này có thể được truy cập từ bất kỳ đâu trong chương trình, không bị giới hạn phạm vi.

↳ final: Lớp này không thể bị kế thừa. Điều này có nghĩa là bạn không thể tạo một lớp con từ LocalTime.

↳ class LocalTime: Khai báo một lớp có tên là LocalTime.

↳ extends Object: Tất cả các lớp trong Java đều kế thừa từ lớp Object (lớp gốc của tất cả các lớp trong Java). Việc này cho phép lớp LocalTime kế thừa các phương thức cơ bản từ Object, chẳng hạn như toString(), equals(), và hashCode().

implements Temporal, TemporalAdjuster, Comparable<LocalTime>, Serializable

Lớp LocalTime thực hiện (implements) các giao diện implements Temporal, TemporalAdjuster, Comparable<LocalTime>, Serializable. Điều này có nghĩa là lớp LocalTime phải cung cấp các phương thức được khai báo trong những giao diện này.

↳ implements Temporal: Lớp LocalTime thực hiện giao diện Temporal, cho phép nó tham gia vào các phép toán liên quan đến thời gian và ngày tháng, như điều chỉnh thời gian và so sánh với các giá trị thời gian khác.

↳ implements TemporalAdjuster: Lớp LocalTime thực hiện giao diện TemporalAdjuster, điều này cho phép nó điều chỉnh hoặc thay đổi giá trị của thời gian. Ví dụ, bạn có thể điều chỉnh thời gian từ LocalTime bằng cách sử dụng các phương thức điều chỉnh có sẵn.

↳ implements Comparable<LocalTime>: Lớp LocalTime thực hiện giao diện Comparable, cho phép so sánh hai đối tượng LocalTime để xác định thứ tự của chúng. Điều này có nghĩa là bạn có thể sử dụng các phương thức như compareTo() để so sánh hai thời gian LocalTime.

↳ implements Serializable: Lớp LocalTime thực hiện giao diện Serializable, cho phép các đối tượng LocalTime được chuyển đổi thành một chuỗi byte để lưu trữ hoặc truyền qua mạng. Việc này cho phép bạn ghi đối tượng LocalTime vào một luồng hoặc lưu trữ nó trong một tệp.

Ⅲ. Các phương thức của lớp LocalTime

Lớp LocalTime cung cấp nhiều phương thức hữu ích để thao tác với thời gian trong ngày. Việc phân nhóm các phương thức theo chức năng sẽ giúp bạn hiểu rõ hơn về cách sử dụng lớp LocalTime. Dưới đây là cách phân nhóm các phương thức phổ biến của lớp LocalTime:

Tạo đối tượng LocalTime

↳ now(): Lấy thời gian hiện tại của hệ thống.

↳ of(int hour, int minute, int second): Tạo một đối tượng LocalTime từ giờ, phút, giây cho trước.

Dưới đây là ví dụ về cách sử dụng hai phương thức now() và of(int hour, int minute, int second) của lớp LocalTime trong Java:

Ví dụ: Example.java

import java.time.LocalTime;
public class Example {
    public static void main(String[] args) {
        // 1. Lấy thời gian hiện tại của hệ thống
        LocalTime currentTime = LocalTime.now();
        System.out.println("Thời gian hiện tại: " + currentTime);
        
        // 2. Tạo một đối tượng LocalTime từ giờ, phút, giây cho trước
        LocalTime specificTime = LocalTime.of(10, 45, 30); // 10:45:30
        System.out.println("LocalTime từ giờ, phút, giây cho trước: " + specificTime);
    }
}

Kết quả của chương trình là:

Thời gian hiện tại: 16:43:27.358381700
LocalTime từ giờ, phút, giây cho trước: 10:45:30

Trong ví dụ này, thời gian hiện tại sẽ thay đổi tùy thuộc vào thời điểm bạn chạy chương trình. Hy vọng ví dụ này giúp bạn hiểu cách sử dụng các phương thức now() và of() để tạo và quản lý đối tượng LocalTime trong Java!

Truy xuất thông tin

↳ get(TemporalField field): Lấy giá trị của một trường thời gian cụ thể (giờ, phút, giây).

Dưới đây là ví dụ sử dụng Phương thức get(TemporalField field) của lớp LocalTime cho phép bạn lấy giá trị của một trường thời gian cụ thể như giờ, phút, hoặc giây trong Java:

Ví dụ: Example.java

import java.time.LocalTime;
import java.time.temporal.ChronoField;

public class Example {
    public static void main(String[] args) {
        // Tạo một đối tượng LocalTime
        LocalTime time = LocalTime.of(15, 30, 45); // 15:30:45
        
        // Lấy giá trị của giờ, phút và giây
        int hour = time.get(ChronoField.HOUR_OF_DAY); // Trường thời gian giờ trong ngày
        int minute = time.get(ChronoField.MINUTE_OF_HOUR); // Trường thời gian phút trong giờ
        int second = time.get(ChronoField.SECOND_OF_MINUTE); // Trường thời gian giây trong phút
        
        // In kết quả ra màn hình
        System.out.println("Giờ: " + hour);
        System.out.println("Phút: " + minute);
        System.out.println("Giây: " + second);
    }
}

Kết quả của chương trình là:

Giờ: 15
Phút: 30
Giây: 45

Kết quả này cho biết giá trị của giờ, phút và giây từ đối tượng LocalTime đã được tạo. Hy vọng ví dụ này giúp bạn hiểu cách sử dụng phương thức get(TemporalField field) để truy xuất các trường thời gian trong Java!

Thay đổi giá trị

↳ plusHours(long hoursToAdd): Cộng thêm một số giờ vào thời gian hiện tại.

↳ minusHours(long hoursToSubtract): Trừ đi một số giờ khỏi thời gian hiện tại.

↳ plusMinutes(long minutesToAdd): Cộng thêm một số phút vào thời gian hiện tại.

↳ minusMinutes(long minutesToSubtract): Trừ đi một số phút khỏi thời gian hiện tại.

Dưới đây là ví dụ về cách sử dụng các phương thức plusHours(), minusHours(), plusMinutes(), và minusMinutes() của lớp LocalTime trong Java:

Ví dụ: Example.java

import java.time.LocalTime;

public class Example {
    public static void main(String[] args) {
        // Tạo một đối tượng LocalTime
        LocalTime time = LocalTime.of(10, 30); // 10:30
        
        // Cộng thêm 2 giờ vào thời gian hiện tại
        LocalTime newTimePlusHours = time.plusHours(2); // 12:30
        System.out.println("Thời gian sau khi cộng 2 tiếng: " + newTimePlusHours);
        
        // Trừ đi 1 giờ khỏi thời gian hiện tại
        LocalTime newTimeMinusHours = time.minusHours(1); // 09:30
        System.out.println("Thời gian sau khi trừ 1 giờ: " + newTimeMinusHours);
        
        // Cộng thêm 45 phút vào thời gian hiện tại
        LocalTime newTimePlusMinutes = time.plusMinutes(45); // 11:15
        System.out.println("Thời gian sau khi cộng 45 phút: " + newTimePlusMinutes);
        
        // Trừ đi 30 phút khỏi thời gian hiện tại
        LocalTime newTimeMinusMinutes = time.minusMinutes(30); // 10:00
        System.out.println("Thời gian sau khi trừ 30 phút: " + newTimeMinusMinutes);
    }
}

Kết quả của chương trình là:

Thời gian sau khi cộng 2 tiếng: 12:30
Thời gian sau khi trừ 1 giờ: 09:30
Thời gian sau khi cộng 45 phút: 11:15
Thời gian sau khi trừ 30 phút: 10:00

Các phương thức plusHours(), minusHours(), plusMinutes(), và minusMinutes() cho phép bạn thay đổi thời gian bằng cách cộng thêm hoặc trừ bớt giờ và phút từ đối tượng LocalTime. Hy vọng ví dụ này giúp bạn hiểu rõ cách sử dụng các phương thức này!

So sánh

↳ compareTo(LocalTime other): So sánh thời gian hiện tại với một thời gian khác.

Dưới đây là ví dụ về cách sử dụng phương thức compareTo(LocalTime other) của lớp LocalTime để so sánh thời gian hiện tại với một thời gian khác:

Ví dụ: Example.java

import java.time.LocalTime;

public class Example {
    public static void main(String[] args) {
        // Tạo các đối tượng LocalTime
        LocalTime time1 = LocalTime.of(14, 30); // 14:30
        LocalTime time2 = LocalTime.of(16, 45); // 16:45
        LocalTime time3 = LocalTime.of(14, 30); // 14:30 (same as time1)

        // So sánh time1 với time2
        int comparison1 = time1.compareTo(time2);
        if (comparison1 < 0) {
            System.out.println("time1 là trước time2");
        } else if (comparison1 > 0) {
            System.out.println("time1 là sau time2");
        } else {
            System.out.println("time1 là giống time2");
        }

        // So sánh time1 với time3
        int comparison2 = time1.compareTo(time3);
        if (comparison2 < 0) {
            System.out.println("time1 là trước time3");
        } else if (comparison2 > 0) {
            System.out.println("time1 là sau time3");
        } else {
            System.out.println("time1 là giống time3");
        }
    }
}

Kết quả của chương trình là:

time1 là trước time2
time1 là giống time3

Hy vọng ví dụ này giúp bạn hiểu cách sử dụng phương thức compareTo() để so sánh các đối tượng LocalTime trong Java!

Kết hợp

↳ atDate(LocalDate date):Kết hợp thời gian hiện tại với một ngày để tạo một đối tượng LocalDateTime.

Dưới đây là ví dụ về cách sử dụng phương thức atDate(LocalDate date) của lớp LocalTime để kết hợp thời gian với một ngày cụ thể, tạo ra một đối tượng LocalDateTime. Ví dụ này cũng bao gồm các phương thức khác như plusHours(), minusHours(), plusMinutes(), và minusMinutes() để thay đổi thời gian:

Ví dụ: Example.java

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class Example {
    public static void main(String[] args) {
        // Tạo một đối tượng LocalTime
        LocalTime time = LocalTime.of(10, 30); // 10:30
        
        // Tạo một đối tượng LocalDate
        LocalDate date = LocalDate.of(2024, 7, 22); // 2024-07-22
        
        // Kết hợp thời gian với ngày để tạo một LocalDateTime
        LocalDateTime dateTime = time.atDate(date); // 2024-07-22T10:30
        System.out.println("Ngày Giờ: " + dateTime);

        // Thay đổi thời gian
        LocalTime newTimePlusHours = time.plusHours(2); // 12:30
        LocalTime newTimeMinusHours = time.minusHours(1); // 09:30
        LocalTime newTimePlusMinutes = time.plusMinutes(45); // 11:15
        LocalTime newTimeMinusMinutes = time.minusMinutes(30); // 10:00

        // Kết hợp thời gian đã thay đổi với ngày
        LocalDateTime dateTimePlusHours = newTimePlusHours.atDate(date); // 2024-07-22T12:30
        LocalDateTime dateTimeMinusHours = newTimeMinusHours.atDate(date); // 2024-07-22T09:30
        LocalDateTime dateTimePlusMinutes = newTimePlusMinutes.atDate(date); // 2024-07-22T11:15
        LocalDateTime dateTimeMinusMinutes = newTimeMinusMinutes.atDate(date); // 2024-07-22T10:00

        // In kết quả ra màn hình
        System.out.println("Ngày Giờ sau khi thêm 2 giờ: " + dateTimePlusHours);
        System.out.println("Ngày Giờ sau khi trừ 1 giờ: " + dateTimeMinusHours);
        System.out.println("Ngày Giờ sau khi thêm 45 phút: " + dateTimePlusMinutes);
        System.out.println("Ngày Giờ sau khi trừ 30 phút: " + dateTimeMinusMinutes);
    }
}

Kết quả của chương trình là:

Ngày Giờ: 2024-07-22T10:30
Ngày Giờ sau khi thêm 2 giờ: 2024-07-22T12:30
Ngày Giờ sau khi trừ 1 giờ: 2024-07-22T09:30
Ngày Giờ sau khi thêm 45 phút: 2024-07-22T11:15
Ngày Giờ sau khi trừ 30 phút: 2024-07-22T10:00

Các phương thức atDate(LocalDate date) cho phép bạn kết hợp một đối tượng LocalTime với một đối tượng LocalDate để tạo ra một đối tượng LocalDateTime. Hy vọng ví dụ này giúp bạn hiểu rõ cách sử dụng các phương thức này trong Java!

Định dạng

↳ format(DateTimeFormatter formatter): Định dạng thời gian hiện tại theo một mẫu định dạng cho trước.

Dưới đây là ví dụ về cách sử dụng phương thức format(DateTimeFormatter formatter) của lớp LocalTime để định dạng thời gian hiện tại theo một mẫu định dạng cho trước. Ví dụ này bao gồm việc tạo một đối tượng LocalTime, định dạng nó bằng cách sử dụng DateTimeFormatter, và in kết quả ra màn hình:

Ví dụ: Example.java

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class Example {
    public static void main(String[] args) {
        // Tạo một đối tượng LocalTime
        LocalTime time = LocalTime.of(15, 45, 30); // 15:45:30
        
        // Tạo một DateTimeFormatter với mẫu định dạng cho trước
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); // 24-hour format
        
        // Định dạng thời gian theo mẫu định dạng
        String formattedTime = time.format(formatter);
        
        // In kết quả ra màn hình
        System.out.println("Thời gian định dạng: " + formattedTime);
        
        // Thử với một mẫu định dạng khác
        DateTimeFormatter shortFormatter = DateTimeFormatter.ofPattern("hh:mm a"); // 12-hour format with AM/PM
        String shortFormattedTime = time.format(shortFormatter);
        
        // In kết quả ra màn hình với định dạng khác
        System.out.println("Thời gian định dạng ngắn: " + shortFormattedTime);
    }
}

Kết quả của chương trình là:

Thời gian định dạng: 15:45:30
Thời gian định dạng ngắn: 03:45 PM

Trong ví dụ này, phương thức format(DateTimeFormatter formatter) cho phép bạn định dạng thời gian theo mẫu định dạng cho trước. Bạn có thể dễ dàng thay đổi mẫu định dạng để phù hợp với yêu cầu của bạn. Hy vọng ví dụ này giúp bạn hiểu cách sử dụng phương thức format() trong Java!

Các ngoại lệ thường gặp khi sử dụng lớp LocalTime trong Java

Dưới đây là các ngoại lệ thường gặp và nguyên nhân của chúng:

Ngoại lệ DateTimeException

↳ Nguyên nhân: Xảy ra khi một thao tác với LocalTime không hợp lệ, chẳng hạn như khi cố gắng tạo một đối tượng LocalTime với giờ, phút hoặc giây ngoài phạm vi hợp lệ.

↳ Ví dụ: Tạo một LocalTime với giá trị giờ không hợp lệ như 25:00:00. Giờ hợp lệ phải từ 0 đến 23 hoặc cố gắng tạo một LocalTime với phút hoặc giây ngoài phạm vi hợp lệ như 10:60:00 hoặc 10:30:60.

Ngoại lệ DateTimeParseException

↳ Nguyên nhân: Xảy ra khi phân tích một chuỗi ngày giờ theo định dạng không đúng.

↳ Ví dụ: Cố gắng phân tích một chuỗi "25:30" theo định dạng HH:mm sẽ gây lỗi vì giờ 25 không hợp lệ hoặc Sử dụng định dạng không khớp với chuỗi đầu vào như định dạng hh:mm:ss để phân tích chuỗi "14:45" mà không có "AM/PM".

Ngoại lệ ArithmeticException

↳ Nguyên nhân: Có thể xảy ra trong các phép toán số học liên quan đến thời gian, chẳng hạn như khi thực hiện phép toán dẫn đến kết quả không hợp lệ.

↳ Ví dụ: Trừ một LocalTime từ một giá trị LocalTime khác dẫn đến thời gian âm hoặc không hợp lệ.

Ngoại lệ UnsupportedTemporalTypeException

↳ Nguyên nhân: Xảy ra khi cố gắng thực hiện một thao tác trên LocalTime mà không hỗ trợ, chẳng hạn như lấy thông tin về ngày trong tháng từ một đối tượng LocalTime.

↳ Ví dụ: Sử dụng phương thức yêu cầu thông tin ngày, tháng từ LocalTime, mặc dù LocalTime chỉ quản lý thời gian trong ngày mà không quản lý ngày tháng năm.

Lưu ý:

Khi làm việc với lớp LocalTime, việc kiểm tra dữ liệu đầu vào và các thao tác ngày tháng là rất quan trọng để tránh các ngoại lệ. Sử dụng các khối try-catch để xử lý ngoại lệ và cung cấp thông báo lỗi hoặc xử lý các tình huống bất thường để làm cho ứng dụng của bạn ổn định và dễ duy trì hơn.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”