2014-10-10 5 views
5

Używam PeriodFormatter, aby zwrócić ciąg wskazujący czas do zdarzenia. Poniższy kod ciągle tworzy ciągi takie jak 1146 godzin 39 minut zamiast x dni y godzin z minut. Jakieś pomysły?PeriodFormatter nie wyświetla dni

Dzięki, Nathan

PeriodFormatter formatter = new PeriodFormatterBuilder() 
       .printZeroNever() 
       .appendDays() 
       .appendSuffix("d ") 
       .appendHours() 
       .appendSuffix("h ") 
       .appendMinutes() 
       .appendSuffix("m ") 
       .toFormatter(); 
     return formatter.print(duration.toPeriod()); 

Odpowiedz

5

To dlatego, konwertowanie Duration do Period metodą Duratoin::toPeriod
Jest to opisane w dokumentacji Joda czasu:

Okres publicznego toPeriod() konwertuje czas trwania do instancji Okres przy użyciu standardowego typu okresu i chronologii ISO. Zostaną użyte tylko dokładne pola w typie okresu. W związku z tym tylko godzina, minuta, sekundy i milisekundy pól w okresie będą używane. Rok, pola miesiąca, tygodnia i dnia nie zostaną wypełnione.

Okres insance cann't być obliczona prawidłowo bez daty rozpoczęcia (lub daty końcowej), ponieważ niektóre dni może być 24h lub 23h (ze względu na DST)

Shoud użyć metody Metoda Duration::toPeriodFrom zamiast tego
Np.

Duration duration = new Duration(date1, date2); 
// ... 
formatter.print(duration.toPeriodFrom(date1)); 
+0

Dobra odpowiedź. Natomiast wywołanie 'Interval :: toPeriod' renderuje tygodnie, dni i takie, ponieważ interwał jest zakotwiczony na osi czasu według wartości DateTime. Zobacz [moja odpowiedź] (http://stackoverflow.com/a/26287848/642706) jako przykład. –