2013-05-08 11 views
5

Mam problem polegający na tym, że liczba dni od epoch zwróconych przez Joda-Time zmienia się w zależności od wprowadzonej daty. Jeśli wprowadzę 2012-05-14 22:00:00 i 2012-05-14 02:00:00, spodziewam się tego samego wyniku, ponieważ oba są tego samego dnia. Oto mój kod.Joda-Time Liczba dni od Epoki

 try { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     Date date1 = sdf.parse("2013-05-03 07:00:00"); 
     Date date2 = sdf.parse("2013-05-03 23:30:00"); 


     MutableDateTime epoch = new MutableDateTime(); 
     epoch.setDate(0); //Set to Epoch time 
     System.out.println("Epoch: " + epoch); 
     Days days1 = Days.daysBetween(epoch, new MutableDateTime(date1.getTime())); 
     Days days2 = Days.daysBetween(epoch, new MutableDateTime(date2.getTime())); 
     System.out.println("1) Days Since Epoch: " + days1.getDays()); 
     System.out.println("2) Days Since Epoch: " + days2.getDays()); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

Epoch: 1970-01-01T11:09:00.414+01:00 
1) Days Since Epoch: 15827 
2) Days Since Epoch: 15828 

Czy ktoś ma jakiś pomysł co robię źle?

+0

Wyniki zależą od strefy czasowej. Pamiętaj, że początek tej epoki przypada na 01-01-1970, 00:00:00 ** GMT **. W zależności od strefy czasowej, 2012-05-14 22:00 i 2012-05-14 02:00 mogą być w różne dni po konwersji na GMT. – Jesper

Odpowiedz

3

OK znalazłem problem (który był na moich oczach :)) ... Epoka, którą otrzymywałem, faktycznie zaczynała się od 1970-01-01, ale nie od pierwszych ms tego dnia.

Musiałem dodać następującą linię do sortowania: Get It

epoch.setTime(0); 
+0

Po prostu uwaga ... W ogólnym przypadku ignorowania czasu, aby skupić się tylko na dacie, wywołaj funkcję [withTimeAtStartOfDay()] (http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime .html # withTimeAtStartOfDay()) w [DateTime] (http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html). Nie wiem, czy dotyczy to tego problemu; Nie testowałem. –