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ả
LocalTimevàZoneOffset– LocalDate وحده không đủ xác định moment trên timeline. ZoneOffsetkhácZoneId: 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).