Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách dùng phương thức toEpochSecond() trong Java 9

Java 9 thêm toEpochSecond() cho LocalDate chuyển local date thành epoch seconds (giây từ 1970-01-01T00:00:00Z). Kết hợp với LocalTime và ZoneOffset để tính toán chính xác.

Cú pháp

public long toEpochSecond(LocalTime time, ZoneOffset offset)

Ví dụ

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneOffset;

public class ToEpochSecondMethodTest {
    public static void main(String args[]) {
        LocalDate date = LocalDate.now();
        LocalTime time = LocalTime.now();
        System.out.println("LocalDate toEpochSecond : " + date.toEpochSecond(time, ZoneOffset.of("Z")));
        System.out.println("LocalTime toEpochSecond : " + time.toEpochSecond(date, ZoneOffset.of("Z")));
    }
}

Kết quả

LocalDate toEpochSecond : 1583496984
LocalTime toEpochSecond : 1583496984

Giải thích

  • LocalDate.toEpochSecond(time, offset): Kết hợp date + time + offset → epoch second.
  • LocalTime.toEpochSecond(date, offset): Overload đối xứng – cùng kết quả.
  • ZoneOffset.of("Z") = UTC (offset +0).

Ví dụ với múi giờ khác

LocalDate date = LocalDate.of(2020, 1, 1);
LocalTime time = LocalTime.of(12, 0, 0);

// UTC
long utcSec = date.toEpochSecond(time, ZoneOffset.UTC);        // 1577880000

// UTC+7 (Vietnam)
long vnSec = date.toEpochSecond(time, ZoneOffset.ofHours(7));  // 1577854800 (sớm hơn 7h = 25200s)

System.out.println(utcSec + " vs " + vnSec);

Ứng dụng

  • Lưu trữ timestamp trong database (BIGINT epoch seconds).
  • Tương tác với hệ thống legacy dùng Unix timestamp.
  • Tính khoảng cách thời gian chính xác giữa 2 LocalDateTime.
  • Cache expiration, TTL tính bằng giây.

Lưu ý

  • Cần cả LocalTime và ZoneOffset – LocalDate وحده không đủ xác định moment trên timeline.
  • ZoneOffset khác ZoneId: Offset cố định, ZoneId có DST rules.
  • Đối xứng: Instant.ofEpochSecond(sec) → ngược lại.

toEpochSecond() bridge giữa domain model (LocalDate/LocalTime) và machine time (epoch seconds).