Lớp java.time.OffsetTime

Lớp OffsetTime trong gói java.time của Java được sử dụng để biểu diễn thời gian có kèm theo độ lệch chuẩn so với Giờ Phối hợp Quốc tế (UTC) theo định dạng ISO-8601, chẳng hạn như "10:15:30+01:00" (10:15:30 giờ cộng thêm 1 giờ so với UTC). OffsetTime là một đối tượng thời gian không đổi (immutable) lưu trữ thông tin giờ, phút, giây, thậm chí có thể chính xác đến nano giây, cùng với độ lệch chuẩn tính theo giờ. Ví dụ, giá trị "13:45:30.123456789+02:00" có thể được lưu trữ trong một OffsetTime.

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

Lưu trữ cả thời gian và độ lệch chuẩn.

Thích hợp để lưu trữ thời gian theo múi giờ cụ thể. Ví dụ, giờ hoạt động của văn phòng đặt tại London (múi giờ UTC+01:00).

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 OffsetTime. 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, OffsetTime là một lớp hữu ích để làm việc với thời gian có tính đến độ lệch chuẩn so với UTC, giúp bạn dễ dàng lưu trữ và thao tác với thời gian theo múi giờ cụ thể.

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

Để sử dụng lớp OffsetTime 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.OffsetTime;

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

Cú pháp

public final class OffsetTime
extends Object
implements Temporal, TemporalAdjuster, Comparable<OffsetTime>, 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ừ OffsetTime.

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

↳ 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 OffsetTime 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<OffsetTime>, Serializable

Lớp OffsetTime thực hiện (implements) các giao diện implements Temporal, TemporalAdjuster, Comparable<OffsetTime>, Serializable. Điều này có nghĩa là lớp OffsetTime 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 OffsetTime thực hiện giao diện Temporal, cho phép nó cung cấp và nhận các thông tin ngày giờ một cách nhất quán với các lớp ngày giờ khác trong Java. Temporal là một giao diện cơ bản cho tất cả các lớp ngày giờ trong gói java.time.

↳ implements TemporalAdjuster: LLớp OffsetTime thực hiện giao diện TemporalAdjuster, cho phép nó điều chỉnh các giá trị thời gian theo các quy tắc tùy chỉnh. TemporalAdjuster cung cấp các phương thức để thay đổi ngày giờ, như thêm hoặc trừ đi các khoảng thời gian.

↳ implements Comparable<OffsetTime>: Lớp Lớp OffsetTime thực hiện giao diện Comparable<OffsetTime>, cho phép các đối tượng OffsetTime được so sánh với nhau. Điều này có nghĩa là bạn có thể sắp xếp hoặc so sánh các đối tượng OffsetTime để xác định thứ tự của chúng.

↳ implements Serializable: Lớp OffsetTime thực hiện giao diện Serializable, cho phép các đối tượng OffsetTime được tuần tự hóa (serialize) và khôi phục (deserialize). Điều này có nghĩa là bạn có thể ghi đối tượng OffsetTime vào một luồng (stream) và sau đó đọc lại từ luồng đó, như khi lưu trữ vào file hoặc gửi qua mạng.

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

Lớp OffsetTime cung cấp nhiều phương thức để thao tác với thời gian có độ lệch chuẩn UTC. 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 OffsetTime. Dưới đây là cách phân nhóm các phương thức phổ biến của lớp OffsetTime:

Tạo đối tượng OffsetTime

↳ now(): Lấy thời gian hiện tại của hệ thống theo múi giờ mặc định.

↳ of(int hour, int minute, int second, int nanoOfSecond, ZoneOffset offset): Tạo một đối tượng OffsetTime từ các thành phần giờ, phút, giây, nano giây và độ lệch chuẩn (zone offset).

↳ now(Clock clock): Lấy thời gian hiện tại theo một Clock cụ thể (cho phép bạn tùy chỉnh nguồn thời gian).

Dưới đây là ví dụ về cách sử dụng ba phương thức of(), now(), và now(Clock clock) của lớp OffsetTime trong một lớp Java.

Ví dụ: Example.java

import java.time.Clock;
import java.time.OffsetTime;
import java.time.ZoneOffset;

public class Example {
    public static void main(String[] args) {
        // 1. Tạo đối tượng OffsetTime từ các thành phần giờ, phút, giây, nano giây và độ lệch chuẩn
        OffsetTime specificOffsetTime = OffsetTime.of(14, 30, 15, 500000000, ZoneOffset.ofHours(2));
        System.out.println("OffsetTime Cụ thể: " + specificOffsetTime);

        // 2. Lấy thời gian hiện tại của hệ thống theo múi giờ mặc định
        OffsetTime currentOffsetTime = OffsetTime.now();
        System.out.println("OffsetTime hiện tại (mặc định hệ thống): " + currentOffsetTime);

        // 3. Lấy thời gian hiện tại theo một Clock cụ thể
        Clock customClock = Clock.system(ZoneOffset.ofHours(-5));
        OffsetTime currentOffsetTimeWithCustomClock = OffsetTime.now(customClock);
        System.out.println("OffsetTime hiện tại (tùy chỉnh đồng hồ): " + currentOffsetTimeWithCustomClock);
    }
}

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

OffsetTime Cụ thể: 14:30:15.500+02:00
OffsetTime hiện tại (mặc định hệ thống): 18:54:59.423937600+07:00
OffsetTime hiện tại (tùy chỉnh đồng hồ): 06:54:59.424938600-05:00

Hy vọng ví dụ này giúp bạn hiểu cách sử dụng các phương thức of(), now(), và now(Clock clock) của lớp OffsetTime!

Lưu ý rằng thời gian hiện tại (currentOffsetTime và currentOffsetTimeWithCustomClock) sẽ thay đổi tùy thuộc vào thời điểm thực hiện mã và múi giờ của hệ thống hoặc đồng hồ cụ thể.

Truy xuất thông tin

↳ getHour(), getMinute(), getSecond(), getNanoOfSecond(): Lấy giá trị của các thành phần giờ, phút, giây và nano giây.

↳ getOffset(): Lấy độ lệch chuẩn so với UTC (zone offset).

↳ get(TemporalField field): Lấy giá trị của một trường thời gian cụ thể (ví dụ: HOUR_OF_DAY, MINUTE_OF_HOUR).

↳ isSupported(TemporalField field): Kiểm tra xem một trường thời gian cụ thể có được hỗ trợ hay không.

Dưới đây là ví dụ về cách sử dụng các phương thức getHour(), getMinute(), getSecond(), getNano(), getOffset(), get(TemporalField field), và isSupported(TemporalField field) của lớp OffsetTime trong một lớp Java:

Ví dụ: Example.java

import java.time.OffsetTime;
import java.time.ZoneOffset;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalField;

public class Example {
    public static void main(String[] args) {
        // Tạo đối tượng OffsetTime
        OffsetTime offsetTime = OffsetTime.of(15, 45, 30, 123456789, ZoneOffset.ofHours(-5));

        // Truy xuất thông tin về giờ, phút, giây và nano giây
        int hour = offsetTime.getHour();
        int minute = offsetTime.getMinute();
        int second = offsetTime.getSecond();
        int nanoOfSecond = offsetTime.getNano();

        System.out.println("Giờ: " + hour);
        System.out.println("Phút : " + minute);
        System.out.println("Giây: " + second);
        System.out.println("Nano giây: " + nanoOfSecond);

        // Truy xuất độ lệch chuẩn so với UTC (zone offset)
        ZoneOffset offset = offsetTime.getOffset();
        System.out.println("Độ lệch: " + offset);

        // Truy xuất giá trị của trường thời gian cụ thể
        TemporalField hourField = ChronoField.HOUR_OF_DAY;
        TemporalField minuteField = ChronoField.MINUTE_OF_HOUR;
        int hourValue = offsetTime.get(hourField);
        int minuteValue = offsetTime.get(minuteField);

        System.out.println("Giá trị trường giờ: " + hourValue);
        System.out.println("Giá trị trường phút: " + minuteValue);

        // Kiểm tra xem các trường thời gian cụ thể có được hỗ trợ hay không
        boolean isHourSupported = offsetTime.isSupported(hourField);
        boolean isSecondSupported = offsetTime.isSupported(ChronoField.SECOND_OF_MINUTE);

        System.out.println("Giờ được hỗ trợ: " + isHourSupported);
        System.out.println("Được hỗ trợ giây: " + isSecondSupported);
    }
}

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

Giờ: 15
Phút : 45
Giây: 30
Nano giây: 123456789
Độ lệch: -05:00
Giá trị trường giờ: 15
Giá trị trường phút: 45
Giờ được hỗ trợ: true
Được hỗ trợ giây: true

Hy vọng ví dụ này giúp bạn hiểu cách sử dụng các phương thức của lớp OffsetTime!

Thay đổi giá trị

↳ withHour(int hour), withMinute(int minute), withSecond(int second), withNanoOfSecond(int nanoOfSecond): Tạo một OffsetTime mới bằng cách thay đổi các thành phần giờ, phút, giây, nano giây.

↳ withOffsetSameLocal(ZoneOffset offset): Tạo một OffsetTime mới bằng cách thay đổi độ lệch chuẩn.

Dưới đây là ví dụ về cách sử dụng các phương thức withHour(), withMinute(), withSecond(), withNano(), và withOffsetSameLocal() của lớp OffsetTime trong một lớp Java.

Ví dụ: Example.java

import java.time.OffsetTime;
import java.time.ZoneOffset;

public class Example {
    public static void main(String[] args) {
        // Tạo đối tượng OffsetTime ban đầu
        OffsetTime originalOffsetTime = OffsetTime.of(10, 30, 15, 123456789, ZoneOffset.ofHours(-5));
        System.out.println("OffsetTime gốc: " + originalOffsetTime);

        // Thay đổi giờ
        OffsetTime updatedHour = originalOffsetTime.withHour(14);
        System.out.println("Sau khi đổi giờ: " + updatedHour);

        // Thay đổi phút
        OffsetTime updatedMinute = originalOffsetTime.withMinute(45);
        System.out.println("Sau khi thay đổi phút: " + updatedMinute);

        // Thay đổi giây
        OffsetTime updatedSecond = originalOffsetTime.withSecond(50);
        System.out.println("Sau khi đổi giây: " + updatedSecond);

        // Thay đổi nano giây
        OffsetTime updatedNano = originalOffsetTime.withNano(987654321);
        System.out.println("Sau khi thay đổi nano giây: " + updatedNano);

        // Thay đổi độ lệch chuẩn
        OffsetTime updatedOffset = originalOffsetTime.withOffsetSameLocal(ZoneOffset.ofHours(3));
        System.out.println("Sau khi thay đổi độ lệch chuẩn: " + updatedOffset);
    }
}

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

OffsetTime gốc: 10:30:15.123456789-05:00
Sau khi đổi giờ: 14:30:15.123456789-05:00
Sau khi thay đổi phút: 10:45:15.123456789-05:00
Sau khi đổi giây: 10:30:50.123456789-05:00
Sau khi thay đổi nano giây: 10:30:15.987654321-05:00
Sau khi thay đổi độ lệch chuẩn: 10:30:15.123456789+03:00

Hy vọng ví dụ này giúp bạn hiểu cách thay đổi các thành phần của đối tượng OffsetTime!

Cộng thời gian

↳plusHours(long hoursToAdd), plusMinutes(long minutesToAdd), plusSeconds(long secondsToAdd), plusNanos(long nanosToAdd): Cộng thêm một khoảng thời gian vào OffsetTime hiện tại.

Dưới đây là ví dụ về cách sử dụng các phương thức plusHours(), plusMinutes(), plusSeconds(), và plusNanos() của lớp OffsetTime trong một lớp Java.

Ví dụ: Example.java

import java.time.OffsetTime;
import java.time.ZoneOffset;

public class Example {
    public static void main(String[] args) {
        // Tạo đối tượng OffsetTime ban đầu
        OffsetTime originalOffsetTime = OffsetTime.of(10, 30, 15, 123456789, ZoneOffset.ofHours(-5));
        System.out.println("OffsetTime gốc: " + originalOffsetTime);

        // Cộng thêm giờ
        OffsetTime afterAddingHours = originalOffsetTime.plusHours(5);
        System.out.println("Sau khi cộng 5 tiếng: " + afterAddingHours);

        // Cộng thêm phút
        OffsetTime afterAddingMinutes = originalOffsetTime.plusMinutes(120);
        System.out.println("Sau khi cộng 120 phút: " + afterAddingMinutes);

        // Cộng thêm giây
        OffsetTime afterAddingSeconds = originalOffsetTime.plusSeconds(3600);
        System.out.println("Sau khi thêm 3600 giây: " + afterAddingSeconds);

        // Cộng thêm nano giây
        OffsetTime afterAddingNanos = originalOffsetTime.plusNanos(1000000000); // 1 giây = 1 tỷ nano giây
        System.out.println("Sau khi thêm 1 tỷ nano giây: " + afterAddingNanos);
    }
}

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

OffsetTime gốc: 10:30:15.123456789-05:00
Sau khi cộng 5 tiếng: 15:30:15.123456789-05:00
Sau khi cộng 120 phút: 12:30:15.123456789-05:00
Sau khi thêm 3600 giây: 11:30:15.123456789-05:00
Sau khi thêm 1 tỷ nano giây: 10:30:16.123456789-05:00

Hy vọng ví dụ này giúp bạn hiểu cách cộng thêm các khoảng thời gian vào đối tượng OffsetTime!

Trừ thời gian

↳ minusHours(long hoursToSubtract), minusMinutes(long minutesToSubtract), minusSeconds(long secondsToSubtract), minusNanos(long nanosToSubtract): Trừ đi một khoảng thời gian khỏi OffsetTime hiện tại.

Dưới đây là ví dụ về cách sử dụng các phương thức minusHours(), minusMinutes(), minusSeconds(), và minusNanos() của lớp OffsetTime trong một lớp Java.

Ví dụ: Example.java

import java.time.OffsetTime;
import java.time.ZoneOffset;

public class Example {
    public static void main(String[] args) {
        // Tạo đối tượng OffsetTime ban đầu
        OffsetTime originalOffsetTime = OffsetTime.of(15, 45, 30, 987654321, ZoneOffset.ofHours(-3));
        System.out.println("OffsetTime gốc: " + originalOffsetTime);

        // Trừ giờ
        OffsetTime afterSubtractingHours = originalOffsetTime.minusHours(4);
        System.out.println("Sau khi trừ 4 tiếng: " + afterSubtractingHours);

        // Trừ phút
        OffsetTime afterSubtractingMinutes = originalOffsetTime.minusMinutes(90);
        System.out.println("Sau khi trừ 90 phút: " + afterSubtractingMinutes);

        // Trừ giây
        OffsetTime afterSubtractingSeconds = originalOffsetTime.minusSeconds(3600);
        System.out.println("Sau khi trừ đi 3600 giây: " + afterSubtractingSeconds);

        // Trừ nano giây
        OffsetTime afterSubtractingNanos = originalOffsetTime.minusNanos(1000000000); // 1 giây = 1 tỷ nano giây
        System.out.println("Sau khi trừ đi 1 tỷ nano giây: " + afterSubtractingNanos);
    }
}

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

OffsetTime gốc: 15:45:30.987654321-03:00
Sau khi trừ 4 tiếng: 11:45:30.987654321-03:00
Sau khi trừ 90 phút: 14:15:30.987654321-03:00
Sau khi trừ đi 3600 giây: 14:45:30.987654321-03:00
Sau khi trừ đi 1 tỷ nano giây: 15:45:29.987654321-03:00

Hy vọng ví dụ này giúp bạn hiểu cách trừ các khoảng thời gian từ đối tượng OffsetTime!

Cộng/trừ một khoảng thời gian tùy ý

↳ plus(long amountToAdd, TemporalUnit unit), minus(long amountToSubtract, TemporalUnit unit): Cộng/trừ một khoảng thời gian tùy ý (được xác định bởi TemporalUnit).

Dưới đây là ví dụ về cách sử dụng các phương thức plus() và minus() của lớp OffsetTime để cộng hoặc trừ một khoảng thời gian tùy ý bằng cách sử dụng TemporalUnit.

Ví dụ: Example.java

import java.time.OffsetTime;
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;

public class Example {
    public static void main(String[] args) {
        // Tạo đối tượng OffsetTime ban đầu
        OffsetTime originalOffsetTime = OffsetTime.of(12, 30, 45, 123456789, ZoneOffset.ofHours(-2));
        System.out.println("OffsetTime gốc: " + originalOffsetTime);

        // Cộng thêm 2 giờ (thay vì cộng ngày)
        TemporalUnit hoursUnit = ChronoUnit.HOURS;
        OffsetTime afterAddingHours = originalOffsetTime.plus(2, hoursUnit);
        System.out.println("Sau khi cộng 2 tiếng: " + afterAddingHours);

        // Cộng thêm 30 phút
        TemporalUnit minutesUnit = ChronoUnit.MINUTES;
        OffsetTime afterAddingMinutes = originalOffsetTime.plus(30, minutesUnit);
        System.out.println("Sau khi cộng 30 phút: " + afterAddingMinutes);

        // Trừ đi 45 giây
        TemporalUnit secondsUnit = ChronoUnit.SECONDS;
        OffsetTime afterSubtractingSeconds = originalOffsetTime.minus(45, secondsUnit);
        System.out.println("Sau khi trừ đi 45 giây: " + afterSubtractingSeconds);

        // Trừ đi 500 nano giây
        TemporalUnit nanosUnit = ChronoUnit.NANOS;
        OffsetTime afterSubtractingNanos = originalOffsetTime.minus(500000000, nanosUnit); // 500 triệu nano giây
        System.out.println("Sau khi trừ 500 triệu nano giây: " + afterSubtractingNanos);
    }
}

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

OffsetTime gốc: 12:30:45.123456789-02:00
Sau khi cộng 2 tiếng: 14:30:45.123456789-02:00
Sau khi cộng 30 phút: 13:00:45.123456789-02:00
Sau khi trừ đi 45 giây: 12:30:00.123456789-02:00
Sau khi trừ 500 triệu nano giây: 12:30:44.623456789-02:00

Hy vọng ví dụ này giúp bạn hiểu cách cộng hoặc trừ một khoảng thời gian tùy ý từ đối tượng OffsetTime!

Cộng/Trừ một khoảng thời gian được biểu diễn bởi một đối tượng

↳ plus(TemporalAmount amountToAdd), minus(TemporalAmount amountToSubtract): Cộng/trừ một khoảng thời gian được biểu diễn bởi một đối tượng TemporalAmount.

Dưới đây là ví dụ về việc sử dụng các phương thức plus(TemporalAmount amountToAdd) và minus(TemporalAmount amountToSubtract) của lớp OffsetTime trong Java. Những phương thức này cho phép bạn cộng hoặc trừ một khoảng thời gian được biểu diễn bởi một đối tượng TemporalAmount.

Ví dụ: Example.java

import java.time.Duration;
import java.time.OffsetTime;
import java.time.ZoneOffset;
import java.time.temporal.TemporalAmount;

public class Example {
    public static void main(String[] args) {
        // Tạo đối tượng OffsetTime ban đầu
        OffsetTime originalOffsetTime = OffsetTime.of(12, 30, 45, 123456789, ZoneOffset.ofHours(-2));
        System.out.println("OffsetTime gốc: " + originalOffsetTime);

        // Tạo một khoảng thời gian để cộng (5 giờ và 30 phút)
        TemporalAmount durationToAdd = Duration.ofHours(5).plusMinutes(30);
        OffsetTime afterAddingDuration = originalOffsetTime.plus(durationToAdd);
        System.out.println("Sau khi cộng thêm 5 giờ 30 phút: " + afterAddingDuration);

        // Tạo một khoảng thời gian để trừ (2 giờ và 15 phút)
        TemporalAmount durationToSubtract = Duration.ofHours(2).plusMinutes(15);
        OffsetTime afterSubtractingDuration = originalOffsetTime.minus(durationToSubtract);
        System.out.println("Sau khi trừ đi 2 giờ 15 phút: " + afterSubtractingDuration);
    }
}

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

OffsetTime gốc: 12:30:45.123456789-02:00
Sau khi cộng thêm 5 giờ 30 phút: 18:00:45.123456789-02:00
Sau khi trừ đi 2 giờ 15 phút: 10:15:45.123456789-02:00

Ví dụ này giúp bạn hiểu cách sử dụng các phương thức plus và minus với đối tượng TemporalAmount để cộng hoặc trừ khoảng thời gian từ một đối tượng OffsetTime.

So sánh

↳ isAfter(OffsetTime other), isBefore(OffsetTime other), isEqual(OffsetTime other): So sánh hai đối tượng OffsetTime dựa trên cả thời gian và độ lệch chuẩn.

Dưới đây là ví dụ về việc sử dụng các phương thức isAfter(OffsetTime other), isBefore(OffsetTime other), và isEqual(OffsetTime other) của lớp OffsetTime trong Java để so sánh hai đối tượng OffsetTime:

Ví dụ: Example.java

import java.time.OffsetTime;
import java.time.ZoneOffset;

public class Example {
    public static void main(String[] args) {
        // Tạo ba đối tượng OffsetTime với thời gian và độ lệch chuẩn khác nhau
        OffsetTime time1 = OffsetTime.of(10, 15, 30, 123456789, ZoneOffset.ofHours(-5));
        OffsetTime time2 = OffsetTime.of(10, 15, 30, 123456789, ZoneOffset.ofHours(-5));
        OffsetTime time3 = OffsetTime.of(12, 30, 45, 987654321, ZoneOffset.ofHours(-2));
        
        // So sánh các đối tượng OffsetTime
        System.out.println("time1 Sau time2: " + time1.isAfter(time2));
        System.out.println("time1 Trước time2: " + time1.isBefore(time2));
        System.out.println("time1 Bằng time2: " + time1.isEqual(time2));
        
        System.out.println("time1 sau time3: " + time1.isAfter(time3));
        System.out.println("time1 Trước time3: " + time1.isBefore(time3));
        System.out.println("time1 Bằng time3: " + time1.isEqual(time3));
    }
}

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

time1 Sau time2: false
time1 Trước time2: false
time1 Bằng time2: true
time1 sau time3: true
time1 Trước time3: false
time1 Bằng time3: false

Ví dụ này giúp bạn hiểu cách sử dụng các phương thức isAfter, isBefore, và isEqual để so sánh các đối tượng OffsetTime dựa trên cả thời gian và độ lệch chuẩn.

Định dạng

↳ format(DateTimeFormatter formatter): Định dạng OffsetTime thành một chuỗi theo một mẫu định dạng cho trước.

Dưới đây là ví dụ về việc sử dụng phương thức format(DateTimeFormatter formatter) của lớp OffsetTime để định dạng đối tượng OffsetTime thành một chuỗi theo mẫu định dạng cho trước:

Ví dụ: Example.java

import java.time.OffsetTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class Example {
    public static void main(String[] args) {
        // Tạo một đối tượng OffsetTime
        OffsetTime time = OffsetTime.of(15, 30, 45, 123456789, ZoneOffset.ofHours(-5));

        // Định dạng OffsetTime thành chuỗi theo mẫu định dạng cho trước
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSSSSSXXX");
        String formattedTime = time.format(formatter);

        // Hiển thị kết quả
        System.out.println("Thời gian định dạng: " + formattedTime);
    }
}

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

Thời gian định dạng: 15:30:45.123456789-05:00

Ví dụ này giúp bạn hiểu cách sử dụng phương thức format để định dạng đối tượng OffsetTime thành một chuỗi theo mẫu định dạng tùy chỉnh.

Các phương thức khác

↳ hashCode(): Trả về một giá trị băm duy nhất cho đối tượng OffsetTime.

↳ toString(): Trả về một chuỗi biểu diễn OffsetTime theo định dạng ISO-8601.

Dưới đây là ví dụ về việc sử dụng các phương thức hashCode() và toString() của lớp OffsetTime trong cùng một lớp Java:

Ví dụ: Example.java

import java.time.OffsetTime;
import java.time.ZoneOffset;

public class Example {
    public static void main(String[] args) {
        // Tạo một đối tượng OffsetTime
        OffsetTime time = OffsetTime.of(14, 45, 30, 500000000, ZoneOffset.ofHours(3));

        // Sử dụng phương thức hashCode
        int hashCode = time.hashCode();
        System.out.println("Giá trị băm của OffsetTime: " + hashCode);

        // Sử dụng phương thức toString
        String timeString = time.toString();
        System.out.println("Chuỗi biểu diễn OffsetTime: " + timeString);
    }
}

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

Giá trị băm của OffsetTime: 1754551138
Chuỗi biểu diễn OffsetTime: 14:45:30.500+03:00

Các ngoại lệ thường gặp khi sử dụng lớp OffsetTime 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: Được ném ra khi các giá trị ngày giờ không hợp lệ, chẳng hạn như giờ hoặc phút vượt quá giới hạn cho phép.

↳ Ví dụ: Cố gắng tạo một đối tượng OffsetTime với giờ là 25 (giờ hợp lệ chỉ từ 0 đến 23) sẽ gây ra lỗi này.

Ngoại lệ DateTimeParseException

↳ Nguyên nhân: Xuất hiện khi phân tích một chuỗi ngày giờ không đúng định dạng hoặc không thể phân tích theo định dạng đã cho.

↳ Ví dụ: Khi sử dụng phương thức parse với chuỗi không tuân thủ định dạng ISO-8601 hoặc định dạng tùy chỉnh sai lệch.

Ngoại lệ UnsupportedTemporalTypeException

↳ Nguyên nhân: Khi yêu cầu một thao tác hoặc truy vấn không được hỗ trợ bởi lớp OffsetTime, ví dụ như cố gắng thêm hoặc trừ một khoảng thời gian không hợp lệ.

↳ Ví dụ: Cố gắng cộng hoặc trừ một số ngày (mặc dù OffsetTime không hỗ trợ ngày) sẽ ném ra ngoại lệ này.

Ngoại lệ ArithmeticException

↳ Nguyên nhân: Được ném ra khi có sự tính toán không hợp lệ, chẳng hạn như khi cộng thêm quá nhiều nano giây dẫn đến tràn số nguyên.

↳ Ví dụ: Cố gắng cộng một số nano giây quá lớn mà dẫn đến giá trị vượt quá giới hạn hợp lệ của OffsetTime.

Ngoại lệ ZoneRulesException

↳ Nguyên nhân: Xuất hiện khi có sự cố với quy tắc múi giờ, ví dụ như khi độ lệch chuẩn (zone offset) không hợp lệ..

↳ Ví dụ: Khi sử dụng một độ lệch chuẩn không hợp lệ hoặc không được hỗ trợ.

Lưu ý:

Khi làm việc với OffsetTime, việc kiểm tra dữ liệu đầu vào và các thao tác thời gian 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.”