java java-8 api-design

java count milliseconds



¿Por qué la clase Duration no tiene el método ''toSeconds()''? (4)

Estaba mirando la clase de Duration en Java 8 y noté que no tiene:

long toSeconds();

Pero tiene todos los demás toXXXXX() para obtener días, horas, minutos, milis, nanos. Veo un método getSeconds() que devuelve el número de segundos dentro de este objeto de duración. También hay un método de get(TemporalUnit unit) para obtener la duración como la unidad de tiempo solicitada. Pero, ¿por qué no mantener el método toSeconds() para mantener la coherencia?


Cita de http://tutorials.jenkov.com/java-date-time/duration.html :

"Puede que se esté preguntando si no hay un método toSeconds (). No lo hay porque eso es lo mismo que la parte de segundos de la Duración. Puede obtener la parte de segundos de la Duración utilizando el método getSeconds () como se explica más temprano."


Este es un problema conocido cuya solución está programada para Java 9: https://bugs.openjdk.java.net/browse/JDK-8142936

Nuevo método agregado en Java 9, a toSeconds . Ver código fuente .

/** * Gets the number of seconds in this duration. * <p> * This returns the total number of whole seconds in the duration. * <p> * This instance is immutable and unaffected by this method call. * * @return the whole seconds part of the length of the duration, positive or negative */ public long toSeconds() { return seconds; }


Porque la Duration

[...] modela una cantidad o cantidad de tiempo en términos de segundos y nanosegundos [...]

Por lo tanto, ofrece los dos métodos.

No hay lógica " a segundos " ya que ya está en segundos.


Veamos lo que dicen los Duration :

Esta clase modela una cantidad o cantidad de tiempo en términos de segundos y nanosegundos.

Básicamente, eso significa que la unidad utilizada para almacenar la cantidad de tiempo representada es de segundos . Por ejemplo, para almacenar la duración de 5 minutos y 10 nanosegundos, se almacenan 300 (segundos) y 10 (nanosegundos). Debido a esto, no hay necesidad de convertir a segundos. getSeconds() los segundos usando getSeconds() .

¿Ves lo que quiero decir aquí? Todos los otros métodos se convierten a las unidades correspondientes: días, minutos, horas ... Es por eso que comienzan con to , lo que significa convertedTo . Como no necesita hacer una conversión para obtener la duración en segundos, el método que devuelve la duración en segundos comienza con get .