2015-10-02 31 views
8

Yerel saat UTC saat diliminde olduğu için org.joda.time.LocalDateTime bir Unix zaman damgasına nasıl dönüştürebilirim?Joda LocalDateTime için Unix zaman damgasını dönüştürün

Örnek:

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

+0

Hatırlarsam, Unix zaman damgası Unix çağından beri geçen saniye sayısıdır, belki de bu gibi bir şey (http://stackoverflow.com/questions/22990067/how-to-extract-epoch-from-localdate- ve-localdatetime) – MadProgrammer

+1

A 'LocalDateTime'de saat dilimi yoktur, bu nedenle zaman içinde bir ponit temsil etmez. Herhangi bir anlam ifade etmek için bir zaman dilimi belirtmeniz gerekir. –

+0

@JonSkeet Bu UTC! –

cevap

18

Verilen İstediğiniz Unix zaman damgası en basit yaklaşım UTC için DateTimeZone belirterek bir DateTime dönüştürmek ve bu dönüşüm gerçekleştirmek üzere olduğu "UTC'de, LocalDateTime verilen":

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

Not Burada bir Unix zaman damgası olarak saniyeler kullanılması - diğer API'ler (ör. java.util.Date) Unix döneminden bu yana milisaniye bekleyebilir.

+0

Ayrıca '1000' yerine DateTimeConstants.MILLIS_PER_SECOND' kullanabilirsiniz veya' Duration.millis (local.toDateTime (DateTimeZone.UTC) .getMillis) .getStandardSeconds' işlevini kullanabilirsiniz. – mixel

+0

Basit ve düzgün, Joda geliştiricisi getLocalMillis() öğesini herkese açık olarak gösterme nedenleri ortaya çıkardığında. Bağlantı: https://github.com/JodaOrg/joda-time/issues/87 – vijay

İlgili konular