2012-02-09 16 views
5

que tienen este código simple:minutos Joda horario en una duración o intervalo

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()); 

Estoy tratando de encontrar simplemente por el número de días y minutos entre dos fechas al azar.

Este es el resultado de este trozo de código:

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 

supongo que estoy haciendo algo mal, simplemente no puedo ver lo que.

Respuesta

13

El problema es que no se está especificando el tipo en el periodo constructor de período, por lo que usa el valor predeterminado de "años, meses, semanas, días, horas, minutos, segundos y milis". Solo está viendo 15 minutos porque no está pidiendo horas, lo que le devolvería -18.

Si sólo desea días y minutos, usted debe especificar que:

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 

Es importante entender la diferencia entre un Duration que es "un cierto número de milisegundos, que se pueden recuperar de acuerdo a las diferentes unidades "y un Period que es efectivamente un mapeo de un conjunto de tipos de campo (minutos, meses, días, etc.) a valores. No hay un solo valor de tiempo en un período: es una colección de valores.

+0

Oh hombre, nunca lo entendí del todo. Estoy iluminado. –

+2

@LouisWasserman: Estoy en una situación algo especial de trasladar Joda Time a .NET, por lo que probablemente tenga una mejor comprensión de eso que la mayoría :) –

3

Parece que está funcionando muy bien, todo lo que necesita hacer para obtener valores positivos es cambiar todo date y currentDate:

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

Creo que al OP le preocupa que una vista de "minutos" dé 15, y la otra da 1095 ... –

+0

Buen punto, ya lo veo. – jbranchaud

Cuestiones relacionadas