Nhìn vào phương pháp này để xem trường nào được hỗ trợ. Bạn sẽ tìm thấy LocalDateTime
:
•NANO_OF_SECOND
•NANO_OF_DAY
•MICRO_OF_SECOND
•MICRO_OF_DAY
•MILLI_OF_SECOND
•MILLI_OF_DAY
•SECOND_OF_MINUTE
•SECOND_OF_DAY
•MINUTE_OF_HOUR
•MINUTE_OF_DAY
•HOUR_OF_AMPM
•CLOCK_HOUR_OF_AMPM
•HOUR_OF_DAY
•CLOCK_HOUR_OF_DAY
•AMPM_OF_DAY
•DAY_OF_WEEK
•ALIGNED_DAY_OF_WEEK_IN_MONTH
•ALIGNED_DAY_OF_WEEK_IN_YEAR
•DAY_OF_MONTH
•DAY_OF_YEAR
•EPOCH_DAY
•ALIGNED_WEEK_OF_MONTH
•ALIGNED_WEEK_OF_YEAR
•MONTH_OF_YEAR
•PROLEPTIC_MONTH
•YEAR_OF_ERA
•YEAR
•ERA
Trường INSTANT_SECONDS - tất nhiên - không được hỗ trợ vì a LocalDateTime
không thể tham chiếu đến bất kỳ dấu thời gian tuyệt đối (toàn cầu) nào. Nhưng điều hữu ích là trường EPOCH_DAY tính số ngày đã trôi qua kể từ 1970-01-01. Các suy nghĩ tương tự có giá trị đối với loại LocalDate
(với các trường được hỗ trợ thậm chí ít hơn).
Nếu bạn định lấy trường mili-do-unix-epoch không tồn tại, bạn cũng cần múi giờ để chuyển đổi từ kiểu cục bộ sang kiểu chung. Việc chuyển đổi này có thể được thực hiện đơn giản hơn nhiều, hãy xem các bài đăng SO khác .
Quay lại câu hỏi của bạn và các số trong mã của bạn:
The result 1605 is correct
=> (2014 - 1970) * 365 + 11 (leap days) + 31 (in january 2014) + 3 (in february 2014)
The result 71461 is also correct => 19 * 3600 + 51 * 60 + 1
16105L * 86400 + 71461 = 1391543461 giây kể từ 1970-01-01T00: 00: 00 (chú ý, không có múi giờ) Sau đó, bạn có thể trừ chênh lệch múi giờ (coi chừng có thể nhân với 1000 nếu tính bằng mili giây).
CẬP NHẬT sau thông tin múi giờ nhất định:
local time = 1391543461 secs
offset = 3600 secs (Europe/Oslo, winter time in february)
utc = 1391543461 - 3600 = 1391539861
Là mã JSR-310 với hai cách tiếp cận tương đương:
long secondsSinceUnixEpoch1 =
LocalDateTime.of(2014, 2, 4, 19, 51, 1).atZone(ZoneId.of("Europe/Oslo")).toEpochSecond();
long secondsSinceUnixEpoch2 =
LocalDate
.of(2014, 2, 4)
.atTime(19, 51, 1)
.atZone(ZoneId.of("Europe/Oslo"))
.toEpochSecond();