2012-02-09 22 views
5

ho questo semplice codice:Joda Tempo minuti di durata o di intervallo di

DateTime date = new DateTime(dateValue); 
DateTime currentDate = new DateTime(System.currentTimeMillis()); 

System.out.println("date: " + date.toString()); 
System.out.println("currentDate: " + currentDate.toString()); 

Period period = new Period(currentDate, date); 
System.out.println("PERIOD MINUTES: " + period.getMinutes()); 
System.out.println("PERIOD DAYS: " + period.getDays()); 

Duration duration = new Duration(currentDate, date); 
System.out.println("DURATION MINUTES: " + duration.getStandardMinutes()); 
System.out.println("DURATION DAYS: " + duration.getStandardDays()); 

Sto cercando di trovare semplicemente il numero di giorni e minuti tra due date casuali.

Questa è l'uscita per questo pezzo di codice:

date: 2012-02-09T00:00:00.000+02:00 
currentDate: 2012-02-09T18:15:40.739+02:00 
PERIOD MINUTES: -15 
PERIOD DAYS: 0 
DURATION MINUTES: -1095 
DURATION DAYS: 0 

Sto indovinando che sto facendo qualcosa di sbagliato, non riesco proprio a vedere che cosa.

risposta

13

Il problema è che non si sta specificando il tipo di periodo costruttore di periodi - quindi utilizza l'impostazione predefinita "anni, mesi, settimane, giorni, ore, minuti, secondi e millis". Stai vedendo solo 15 minuti perché non stai chiedendo ore, il che restituirebbe -18.

Se desideri solo giorni e minuti, è necessario specificare che:

PeriodType type = PeriodType.forFields(new DurationFieldType[] { 
              DurationFieldType.days(), 
              DurationFieldType.minutes() 
             }); 

Period period = new Period(currentDate, date, type); 
// Now you'll just have minutes and days 

E 'importante capire la differenza tra un Duration che è "un certo numero di millisecondi, che possono essere recuperati in base alle diverse unità "e uno Period che è effettivamente una mappatura da un insieme di tipi di campo (minuti, mesi, giorni ecc.) ai valori. Non c'è un singolo valore temporale in un periodo: è un insieme di valori.

+0

Oh uomo, non l'ho mai capito del tutto. Sono illuminato. –

+2

@LouisWasserman: mi trovo in una situazione alquanto particolare per il porting di Joda Time su .NET, quindi probabilmente ne ho una migliore comprensione rispetto alla maggior parte :) –

3

Sembra che sta lavorando bene, tutto quello che dovete fare per ottenere valori positivi è di swap intorno date e currentDate:

Period period = new Period(date, currentDate); 
+0

Penso che l'OP sia preoccupato che una vista di "minuti" sta dando 15, e l'altra sta dando 1095 ... –

+0

Buon punto, lo vedo ora. – jbranchaud

Problemi correlati