2012-03-08 12 views
20

Estoy intentando conseguir el cantidad total de milisegundos (no el campo millis) de la instancia de objeto y punto. Probé varias conversiones, ya que no pude encontrar ningún método que me la facilitara fácilmente.tiempo Joda, período de Millis total de

¿Alguien alguna vez lo ha necesitado y logró recuperarlo?

(necesito esto para mi parche, para averiguar un período negativo;. Millis negativo = período negativo)

Respuesta

14

No se puede obtener los millis directamente de un Period, ya que los campos como meses y años son variables en términos de milisegundos.

Para que esto funcione, debe proporcionar un instante de "línea base" desde el cual Period puede calcular la duración real de milisegundos.

Por ejemplo, los métodos Period.toDurationFrom y Period.toDurationTo toman tal instante de referencia, y calculan un objeto Duration, que luego puede obtener en milis.

El Javadoc para toDurationFrom dice:

Obtiene la duración total de milisegundos de este período con relación a un arranque instantáneo. Este método agrega el período al instante especificado para calcular la duración.

Se debe suministrar un instante ya que la duración de un período varía. Por ejemplo, un período de 1 mes puede variar entre el equivalente a 28 y 31 días en milisegundos debido a diferentes meses de duración. De manera similar, un día puede variar al corte de horario de verano, generalmente entre 23 y 25 horas.

Por lo tanto, debe elegir un instante de referencia adecuado para su aplicación.

+0

tiene: DateTime cero = new DateTime (0); long millis = period.toDurationFrom (cero) .getMillis(); – Droritos

+0

@DrorWeiss: Eso funcionará solo durante períodos relativamente pequeños. Si comienzas a usar períodos de más de un mes, eso puede darte un resultado distorsionado. – skaffman

+0

lo he probado ... hasta ahora se ve bien. sin embargo, voy a vigilar. Gracias ! ;) – Droritos

2

Si desea obtener los milis de un específico vez se puede hacer utilizando los métodos más() o menos() de la clase DateTime.

p. Ej. conseguir los millis de ahora

DateTime start = new DateTime(); //NOW 
DateTime end = start.plus(<your period>); 
long millis = end.getMillis() - start.getMillis(); 
Cuestiones relacionadas