seleccionar para obtener metodos manejo hora gregorian fechas fecha example clase calendario actual java date

java - para - metodos de la clase calendar



Agregar n horas a una fecha en Java? (15)

¿Cómo agrego n horas a un objeto Date? Encontré otro ejemplo usando días en StackOverflow, pero todavía no entiendo cómo hacerlo con horas.


tl; dr

myJavaUtilDate.toInstant() .plusHours( 8 )

O…

myJavaUtilDate.toInstant() // Convert from legacy class to modern class, an `Instant`, a point on the timeline in UTC with resolution of nanoseconds. .plus( // Do the math, adding a span of time to our moment, our `Instant`. Duration.ofHours( 8 ) // Specify a span of time unattached to the timeline. ) // Returns another `Instant`. Using immutable objects creates a new instance while leaving the original intact.

Usando java.time

El marco java.time integrado en Java 8 y posterior suplanta las antiguas clases Java.util.Date/.Calendar. Esas viejas clases son notoriamente problemáticas. Evítales.

Use el método toInstant recientemente agregado a java.util.Date para convertir del tipo anterior al nuevo tipo java.time. Un Instant es un momento en la línea de tiempo en UTC con una resolución de nanoseconds .

Instant instant = myUtilDate.toInstant();

Puede agregar horas a ese Instant al pasar un TemporalAmount como Duration .

Duration duration = Duration.ofHours( 8 ); Instant instantHourLater = instant.plus( duration );

Para leer esa fecha-hora, genere un String en formato estándar ISO 8601 llamando a toString .

String output = instantHourLater.toString();

Es posible que desee ver ese momento a través de la lente de la hora del reloj de pared de una región. Ajuste el Instant en su zona horaria deseada / esperada creando un ZonedDateTime .

ZoneId zoneId = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Alternativamente, puede llamar a plusHours para agregar su cantidad de horas. Ser zonificado significa que el horario de verano (DST) y otras anomalías se manejarán en su nombre.

ZonedDateTime later = zdt.plusHours( 8 );

Debe evitar el uso de las antiguas clases de fecha y hora, incluidas java.util.Date y .Calendar . Pero si realmente necesita un java.util.Date para la interoperabilidad con clases aún no actualizadas para los tipos java.time, convierta de ZonedDateTime través de Instant . Los nuevos métodos agregados a las clases antiguas facilitan la conversión a / de los tipos de java.time.

java.util.Date date = java.util.Date.from( later.toInstant() );

Para obtener más información sobre la conversión, consulte mi respuesta a la pregunta, Convertir java.util.Date a qué tipo de "java.time"? .

Acerca de java.time

El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases legacy fecha y hora como java.util.Date , java.util.Calendar y SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busque para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

Puede intercambiar objetos java.time directamente con su base de datos. Use un controlador JDBC que cumpla con JDBC 4.2 o posterior. Sin necesidad de cadenas, sin necesidad de clases java.sql.* .

¿Dónde obtener las clases de java.time?

  • Java SE 8 , Java SE 9 y posterior
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
  • Android
    • Versiones posteriores de las implementaciones del paquete de Android de las clases java.time.
    • Para Android anterior (<26), el proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente). Consulte Cómo utilizar ThreeTenABP ....

El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval , YearWeek , YearQuarter y more .


Algo como:

Date oldDate = new Date(); // oldDate == current time final long hoursInMillis = 60L * 60L * 1000L; Date newDate = new Date(oldDate().getTime() + (2L * hoursInMillis)); // Adds 2 hours


Con Joda-Time

DateTime dt = new DateTime(); DateTime added = dt.plusHours(6);



Esta es otra pieza de código cuando su objeto Date está en formato de Date hora. La belleza de este código es: si le das más horas, la fecha también se actualizará en consecuencia.

String myString = "09:00 12/12/2014"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy"); Date myDateTime = null; //Parse your string to SimpleDateFormat try { myDateTime = simpleDateFormat.parse(myString); } catch (ParseException e) { e.printStackTrace(); } System.out.println("This is the Actual Date:"+myDateTime); Calendar cal = new GregorianCalendar(); cal.setTime(myDateTime); //Adding 21 Hours to your Date cal.add(Calendar.HOUR_OF_DAY, 21); System.out.println("This is Hours Added Date:"+cal.getTime());

Aquí está la salida:

This is the Actual Date:Fri Dec 12 09:00:00 EST 2014 This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014


Para simplificar el ejemplo de @ Christopher.

Digamos que tienes una constante

public static final long HOUR = 3600*1000; // in milli-seconds.

Puedes escribir.

Date newDate = new Date(oldDate.getTime() + 2 * HOUR);

Si usa mucho para almacenar la fecha / hora en lugar del objeto Date, puede hacer

long newDate = oldDate + 2 * HOUR;


Puede usar este método, es fácil de entender e implementar:

public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, nombreHeure); calendar.add(Calendar.MINUTE, nombreMinute); calendar.add(Calendar.SECOND, nombreSeconde); return calendar.getTime(); }


Puede usar la clase LocalDateTime de Java 8. Por ejemplo:

long n = 4; LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDateTime.plusHours(n));


Puedes hacerlo con Joda DateTime API

DateTime date= new DateTime(dateObj); date = date.plusHours(1); dateObj = date.toDate();


Si está dispuesto a usar java.time , aquí hay un método para agregar duraciones formateadas ISO 8601:

import java.time.Duration; import java.time.LocalDateTime; ... LocalDateTime yourDate = ... ... // Adds 1 hour to your date. yourDate = yourDate.plus(Duration.parse("PT1H")); // Java. // OR yourDate = yourDate + Duration.parse("PT1H"); // Groovy.



Usando la clase newish java.util.concurrent.TimeUnit puedes hacerlo así

Date oldDate = new Date(); // oldDate == current time Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours


mediante el uso de clases Java 8. podemos manipular la fecha y la hora muy fácilmente como a continuación.

LocalDateTime today = LocalDateTime.now(); LocalDateTime minusHours = today.minusHours(24); LocalDateTime minusMinutes = minusHours.minusMinutes(30); LocalDate localDate = LocalDate.from(minusMinutes);


Verifique la clase de calendario. Tiene método add (y algunos otros) para permitir la manipulación del tiempo. Algo como esto debería funcionar.

Calendar cal = Calendar.getInstance(); // creates calendar cal.setTime(new Date()); // sets calendar time/date cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour cal.getTime(); // returns new date object, one hour in the future

Verifique API para más.


Date argDate = new Date(); //set your date. String argTime = "09:00"; //9 AM - 24 hour format :- Set your time. SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm"); String dateTime = sdf.format(argDate) + " " + argTime; Date requiredDate = dateFormat.parse(dateTime);