2009-04-08 38 views
205

Date.getTime() trả về mili giây kể từ ngày 1 tháng 1 năm 1970. Unixtime là giây kể từ ngày 1 tháng 1 năm 1970. Tôi không thường viết mã bằng java, nhưng tôi đang thực hiện một số sửa lỗi. Tôi có:Lấy "unixtime" trong Java

Date now = new Date();  
Long longTime = new Long(now.getTime()/1000); 
return longTime.intValue(); 

Có cách nào tốt hơn để có được unixtime trong java không?

CẬP NHẬT

Dựa trên đề nghị John M, tôi đã kết thúc với:

return (int) (System.currentTimeMillis()/1000L); 
+22

Vì bạn đã truyền nó thành một int, bạn đã giới thiệu bài toán năm 2038 (tương đương với Y2K cho Unix). Đó là khi thời đại của Unix chạm tới 2 tỷ và chuyển sang tiêu cực. Bản sửa lỗi là chuyển sang Unix 64 bit. Tương đương Java là để nó như là một lâu dài. –

+1

Vâng, tôi biết điều đó. Mã này là giao tiếp với đang mong đợi một int 32bit cho unixtime. –

+123

2038 sắp ra mắt. – Pacerier

Trả lời

385

Tránh việc tạo ra đối tượng Date w/System.currentTimeMillis(). Một chia cho 1000 đưa bạn đến kỷ nguyên Unix.

Như đã đề cập trong một nhận xét, bạn thường muốn một dài nguyên thủy (chữ thường dài-l) không phải là một đối tượng đóng hộp dài (capital-L Long) cho kiểu biến unixTime.

long unixTime = System.currentTimeMillis()/1000L; 
+3

Cũng xem xét sử dụng nguyên thủy dài thay vì autoboxing thành Long, trừ khi bạn muốn xử lý số như một đối tượng (như đặt nó vào bộ sưu tập), một lần nữa tránh tạo đối tượng không cần thiết – Brabster

+0

Nếu bạn có thể tránh sử dụng Date hoàn toàn, bạn sẽ tốt hơn anyway ... – Varkhan

+0

Dấu thời gian thực của UNIX phải được biểu thị bằng int, đúng không? – Zorayr

166

Java 8 đã thêm API mới để làm việc với ngày và giờ. Với Java 8 bạn có thể sử dụng

long unixTimestamp = Instant.now().getEpochSecond(); 

Instant.now() trả về một Instant đại diện cho thời gian hệ thống hiện hành. Với getEpochSecond() bạn nhận được giây epoch (thời gian unix) từ Instant.

+17

Đây phải là câu trả lời được chấp nhận mới. –

+1

Sự khác biệt giữa 'Instant.now(). GetEpochSecond()', 'new Date(). GetTime()' và 'System.currentTimeMillis()' – SohamC

+1

Một khác biệt là trước đây là giây trong khi hai tính bằng mili giây. Có thể có hoặc không thể là những người khác. –

Các vấn đề liên quan