2015-10-02 19 views
8

Làm cách nào để chuyển đổi org.joda.time.LocalDateTime thành dấu thời gian Unix, do thời gian địa phương ở múi giờ UTC?Chuyển đổi Joda LocalDateTime thành dấu thời gian Unix

Ví dụ:

new LocalDateTime(2015, 10, 02, 11, 31, 40)>1443785500.

+0

Nếu tôi nhớ lại, dấu thời gian Unix là số giây kể từ thời đại Unix, có thể giống như [this] (http://stackoverflow.com/questions/22990067/how-to-extract-epoch-from-localdate- và-localdatetime) – MadProgrammer

+1

Một 'LocalDateTime' không có múi giờ, vì vậy nó không đại diện cho một ponit đúng lúc. Bạn cần phải xác định múi giờ để điều đó có ý nghĩa. –

+0

@JonSkeet Đó là UTC! –

Trả lời

18

Cho rằng bạn muốn dấu thời gian Unix "sự trao LocalDateTime, trong UTC" cách tiếp cận đơn giản nhất chỉ là để chuyển nó sang một DateTime bằng cách xác định DateTimeZone cho UTC, và chuyển đổi đó:

LocalDateTime local = new LocalDateTime(2015, 10, 02, 11, 31, 40); 
DateTime utc = local.toDateTime(DateTimeZone.UTC); 
long secondsSinceEpoch = utc.getMillis()/1000; 

Lưu ý sử dụng giây ở đây như là một dấu thời gian Unix - các API khác (ví dụ: java.util.Date) có thể mong đợi mili giây kể từ thời đại Unix.

+0

Ngoài ra, bạn có thể sử dụng 'DateTimeConstants.MILLIS_PER_SECOND' thay cho' 1000' hoặc sử dụng 'Duration.millis (local.toDateTime (DateTimeZone.UTC) .getMillis) .getStandardSeconds'. – mixel

+0

Đơn giản và gọn gàng, Khi nhà phát triển Joda đang đưa ra lý do để vạch trần getLocalMillis() là công khai. Liên kết: https://github.com/JodaOrg/joda-time/issues/87 – vijay

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