vistas ver una tabla saber quien querys procesos modifico mejoras funcion ejecutar ejecucion developer consultar como 12c java java-time

java - una - ver procesos en ejecucion oracle



La clase Java 8 Instant no tiene el método plusHours a pesar de que se muestra en el código de ejemplo de Oracle Tutorial (1)

El tutorial de Oracle es incorrecto

Desafortunadamente, el Tutorial de Oracle es incorrecto en este asunto. Esa línea de código de ejemplo es simplemente incorrecta. Buena captura de tu parte.

Este error es bastante desafortunado ya que el Tutorial es un excelente recurso para aprender y estudiar Java.

Instant::plus

La clase Instant no tiene un método como plusHours definido en Java 8 o Java 9.

En su lugar, puede llamar al método plus y especificar horas.

Instant later = instant.plus( 1 , ChronoUnit.HOURS ) ;

ZonedDateTime::plusHours

La clase Instant es una clase básica de bloques de construcción, que indica un momento en la línea de tiempo en UTC . Por lo general, al realizar manipulaciones como agregar horas, es probable que desee tener en cuenta las anomalías como el horario de verano , por lo que le interesará la zona horaria . Para eso, use la clase ZonedDateTime . Esa clase ofrece un método conveniente plusHours , una fuente probable de confusión para los autores del Tutorial .

Especifique un nombre de zona horaria adecuado en el formato de continent/region , como America/Montreal , Africa/Casablanca o Pacific/Auckland . Nunca use la abreviatura de 3-4 letras, como EST o IST ya que no son zonas horarias verdaderas, no están estandarizadas y ni siquiera son únicas (!).

ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime zdt = instant.atZone( z ) ; // Same moment, but viewed through the lens of a region’s wall-clock time. ZonedDateTime zdtLater = zdt.plusHours( 1 ) ;

Instant versus ZonedDateTime

Veamos un ejemplo de anomalía al agregar horas. Cuando se divide en zonas, agregamos una hora al momento particular de la 1 AM el 23 de marzo de 2017 y, por supuesto, esperamos las 2 AM, pero nos sorprende ver las 3 AM. Sin embargo, cuando consideramos el mismo momento en UTC en lugar de esa zona horaria en particular, el mismo punto en la línea de tiempo, agregando una hora se comporta como se esperaba.

Esta anomalía particular se debe a la adopción del horario de verano (DST) en la mayor parte de América del Norte, en particular aquí, la zona horaria America/New_York . En la primavera, los relojes "adelantan" una hora. Cuando los relojes dan las 2 AM, saltan a las 3 AM. Así que la hora de las dos en punto nunca existió ese día.

// ZonedDateTime LocalDate ld = LocalDate.of( 2017 , Month.MARCH , 12 ) ; LocalTime lt = LocalTime.of( 1 , 0 ) ; ZoneId z = ZoneId.of( "America/New_York" ) ; ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ; ZonedDateTime zdtOneHourLater = zdt.plusHours( 1 ) ; System.out.println( "zdt: " + zdt ) ; System.out.println( "zdtOneHourLater: " + zdtOneHourLater ) ; System.out.println( "Yikes! 1 AM plus an hour is 3 AM? Yes, that is an anomaly known as Daylight Saving Time (DST)." ) ; System.out.println( "" ) ; // Instant Instant instant = zdt.toInstant() ; // Adjust into UTC. Same moment, same point on the timeline, but viewed by a different wall-clock. Instant instantOneHourLater = instant.plus( 1 , ChronoUnit.HOURS ) ; System.out.println( "instant: " + instant ) ; System.out.println( "instantOneHourLater: " + instantOneHourLater ) ; System.out.println( "Instant is always in UTC. So no anomalies, no DST. Adding an hour to 1 AM results in 2 AM every time." ) ;

Vea este código en vivo en IdeOne.com .

zdt: 2017-03-12T01: 00-05: 00 [América / Nueva_York]

zdtOneHourLater: 2017-03-12T03: 00-04: 00 [América / Nueva_York]

¡Ay! ¿1 AM más una hora son las 3 AM? Sí, esa es una anomalía conocida como horario de verano (DST).

instantáneo: 2017-03-12T06: 00: 00Z

instantOneHourLater: 2017-03-12T07: 00: 00Z

Instantáneo siempre está en UTC. Entonces no hay anomalías, no hay horario de verano. Agregar una hora a la 1 AM resulta en 2 AM cada vez.

La página Tutorial de Oracle para la clase Instant muestra este código de ejemplo:

Instant oneHourLater = Instant.now().plusHours(1);

Cuando intento compilar este código, el compilador arroja el error:

  • Error

InstantPrint.java:6: error: cannot find symbol Instant oneHourLater = Instant.now().plusHours(1); ^ symbol: method plusHours(int) location: class Instant

Pero esta documentación de Java menciona el método plusHours() , pero plusHours() esta clase Instant y no contiene el método plusHours() .

A partir de entonces, ¿por qué mencionar este método plusHours() en el ejemplo?