2016-10-18 3 views
0

Ich versuche, die Unterschiede zwischen diesen Zeitpunkten zu berechnen, wie Stunden, Minuten vor Monaten, ...joda Zeit period.getMonths() immer 0

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
     "dd/M/yyyy HH:mm:ss"); 

Date now = null; 
try { 
    now = simpleDateFormat.parse(simpleDateFormat.format(new Date())); 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
Date time = null; 
try { 
    time = simpleDateFormat.parse(simpleDateFormat.format(timestamp)); 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Interval interval = new Interval(time.getTime(), now.getTime()); 
Period period = interval.toPeriod(); 

Integer s = period.getSeconds(); 
Integer m = period.getMinutes(); 
Integer h = period.getHours(); 
Integer days = period.getDays(); 

Integer mo = period.getMonths(); 
Integer y = period.getYears(); 

Integer mo = period.getMonths(); ist immer Null

i/p=> now =Tue Oct 18 12:15:50 IST 2016 
     time=Mon Sep 26 14:38:36 IST 2016 

o/p=> s=14 
     m=37 
     h=21 
     days=0 
     mo=0 
     y=0 

Ich versuchte auch LocalDate und DateTime aber hatte das gleiche Problem.

+3

Was ist der Sinn von 'simpleDateFormat.parse (simpleDateFormat.format (x))'? – Andreas

+1

Ihre Daten liegen weniger als einen Monat auseinander, daher überrascht es nicht, dass Sie monatelang "0" bekommen. Tage sollten jedoch nicht Null sein. Wenn Sie auf Java 8 sind, gibt es eine neue eingebaute Datum/Zeit-Bibliothek (von dem Typ, der JodaTime gemacht hat), der einen neuen Formatierer/Parser enthält. –

+0

Sie erhalten 0 Tage, weil es 3 Wochen ist. 'period.getWeeks()' returns 3. Sie könnten dies auf die gleiche Weise herausgefunden haben, indem ich einfach den Punkt drucke: 'P3WT21H37M14S' – Andreas

Antwort

2

Mit der Art, wie Sie es jetzt tun, erhalten Sie einen Zeitraum, der in Wochen ausgedrückt wird. Das Feld "Wochen" des Zeitraums wird festgelegt, das Feld Jahre/Monate/Tage wird jedoch nicht festgelegt.

Wenn Sie einen Zeitraum mit Jahren, Monaten wollen, Tag und Zeit, dann müssen Sie den Zeitraum Typ angeben, wenn Sie toPeriod auf dem Intervall nennen:

Period period = interval.toPeriod(PeriodType.yearMonthDayTime()); 

Ergebnis:

i/p=> now =Tue Oct 18 12:15:50 IST 2016 
     time=Mon Sep 26 14:38:36 IST 2016 

o/p=> s=14 
     m=37 
     h=21 
     days=21 
     mo=0 
     y=0 

Natürlich ist das Feld Monate und Jahre bei diesem Beispiel immer noch 0, da die beiden Daten weniger als einen Monat auseinander liegen.