¿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.¿Agregar n horas a una fecha en Java?
Respuesta
Consulte la clase de calendario. Tiene el 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
Compruebe API para más.
Solo tenga cuidado si está lidiando con el horario de verano/horario de verano. – CurtainDog
No hace falta mencionar que puede agregar "horas negativas" – pramodc84
@CurtainDog Usando 'Calendar.add()' se encarga de eso automáticamente. – Jesper
Si utiliza Apache Commons/Lang, lo puede hacer en un solo paso utilizando DateUtils.addHours():
Date newDate = DateUtils.addHours(oldDate, 3);
(El objeto original permanece sin cambios)
Con Joda-Time
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
+1 un poco innecesario para esto, pero si va a hacer más manipulación de fecha, joda time es una gran biblioteca –
@JoeriHendrickx Si el programador está agregando horas a una fecha, entonces * muy * probable que estén haciendo otra fecha -hora de trabajar. No considero [Joda-Time] (http://www.joda.org/joda-time/) innecesario en absoluto; Lo primero que hago al configurar cualquier proyecto nuevo es agregar Joda-Time. Incluso Sun y Oracle estuvieron de acuerdo en que el antiguo java.util.Date & Calendar necesita ser eliminado, por lo que agregaron el nuevo [java.time. * Paquete] (http://download.java.net/jdk8/docs/api). /java/time/package-summary.html) (inspirado en Joda-Time) a Java 8. –
Tuve problemas con Joda en Android. Se guardó 'ClassNotDefinedException' – TheRealChx101
Algo así 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
Para simplificar el ejemplo de @ Christopher.
Digamos que tiene una constante
public static final long HOUR = 3600*1000; // in milli-seconds.
Puede escribir.
Date newDate = new Date(oldDate.getTime() + 2 * HOUR);
Si utiliza largo para almacenar la fecha/hora en lugar del objeto Fecha que puede hacer
long newDate = oldDate + 2 * HOUR;
Utilización de la clase newish java.util.concurrent.TimeUnit puede hacerlo de esta manera
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours
Cerrar pero no del todo bien. Debería elegir 'ZonedDateTime' en lugar de' LocalDateTime'. "Local" significa * no * vinculado a una localidad en particular, y * no * vinculado a la línea de tiempo.Al igual que "La Navidad comienza a la medianoche del 25 de diciembre de 2015" es un momento diferente en las distintas zonas horarias, sin significado hasta que aplique un huso horario determinado para obtener un momento determinado de la línea de tiempo. Además, sin una zona horaria, el horario de verano (DST) y otras anomalías no se manejarán con dicho uso de LocalDateTime. Ver [mi respuesta] (http://stackoverflow.com/a/33021219/642706) en comparación. –
También para obtener un objeto 'java.util.Date' ya que el solicitante nos había pedido' ZonedDateTime.toInstant() 'y' Date.from() 'como se describe aquí https://stackoverflow.com/a/32274725/5661065 – hayduke
Esta es otra pieza de código cuando su objeto Date
está en formato de fecha y 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
También puede usar: Calendario cal = Calendar.getInstance(); –
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);
tl; dr
myUtilDate.toInstant().plus(Duration.ofHours(8))
Usando java.time
El marco java.time incorporado en Java 8 y más tarde suplanta las antiguas clases de Java.util.Date/.Calendar. Esas viejas clases son notoriamente problemáticas. Evítales.
Utilice 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 para que Instant
pasando un TemporalAmount
como Duration
.
Duration duration = Duration.ofHours(8);
Instant instantHourLater = instant.plus(duration);
Para leer esa fecha a tiempo, generar una cadena en formato ISO 8601 estándar llamando toString
.
String output = instantHourLater.toString();
Es posible que desee ver ese momento a través de la lente de alguna región de wall-clock time. 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 plusHours
añadir su recuento 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);
Usted debe evitar el uso de las clases de edad de fecha y hora, incluyendo java.util.Date
y .Calendar
. Pero si realmente necesita un java.util.Date
para la interoperabilidad con las clases aún no actualizadas para los tipos de java.time, convierta de ZonedDateTime
a 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 mayor discusión sobre la conversión, consulte my Answer a la pregunta, Convert java.util.Date to what “java.time” type?.
Sobre java.time
El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date
, Calendar
, & SimpleDateFormat
.
El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a java.time.
Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
¿Dónde obtener las clases java.time?
- Java SE 8 y SE 9 y más tarde
- incorporado.
- Parte de la API estándar de Java con una implementación integrada.
- Java 9 agrega algunas características menores y correcciones.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
- Android
- El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
- Ver How to use….
El proyecto se extiende ThreeTen-Extra 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.
Puede hacerlo con API Joda DateTime
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
Trabajando después de haber cambiado la 1ra línea en DateTime dateTime = new DateTime (dateObj); –
Puede utilizar este método, es fácil de entender y poner en práctica:
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();
}
Este enfoque ya se presentó en [otra respuesta] (http://stackoverflow.com/a/3581278/642706) publicado hace años. No veo cómo esto agrega más valor. –
El valor agregado de mi propuesta es la simplicidad y la facilidad de implementación, el usuario solo tiene que pegarlo y usarlo y agregar las horas, minutos o segundos, como usted sabe, el nivel de principiante es diferente y si las respuestas propuestas se combinan entre simple respuestas y respuestas avanzadas será apreciable :) – Nimpo
Si usted está dispuesto a utilizar java.time
, aquí está 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.
'Duration.parse (iso8601duration)' es interesante, gracias, pero no se puede usar el operador '+' en 'LocalDateTime', es posible que desee editar eso. Pero '.plus (...)' funciona. – qlown
Gracias @qlown, supongo que el + está funcionando en groovy porque así es como lo estoy usando ahora. Voy a modificar la respuesta en consecuencia. – Daniel
- 1. Agregar días a una fecha en Java
- 2. ¿Cómo agregar horas a un NSDate?
- 3. Agregar 6 horas a la función now()
- 4. agregar segundos a una fecha
- 5. Conversión de 12 horas a 24 horas en java
- 6. Restar n horas de DateTime en Ruby
- 7. MySQL agregar días a una fecha
- 8. mysql agregando horas a datetime
- 9. R Agregar los días a una fecha
- 10. adición de 12 horas a mysql fecha y hora actual
- 11. Convertir formato de 12 horas a 24 horas en Ruby
- 12. Cómo agregar 4 horas al tiempo en PHP/MySQL
- 13. MySQL TIMEDIFF a horas
- 14. conversión de formato de fecha y hora a 12 horas
- 15. Agregar un mes a una fecha en JavaScript
- 16. Agregar un mes a una fecha en T SQL
- 17. ¿Cómo agregar días a la fecha actual en javascript?
- 18. Php obtener cuántos días y horas quedan de una fecha
- 19. Fecha JSON a la fecha de Java?
- 20. ¿Cómo puedo obtener horas de una fecha de Python?
- 21. Agregar n días hábiles a una fecha dada ignorando días festivos y fines de semana en python
- 22. Quiero agregar horas o minutos a la hora actual
- 23. Fechas y horas en columnas separadas, convertir a fecha y hora en R
- 24. Convertir 12 horas a 24 horas
- 25. cómo agregar un día a una fecha usando jquery datepicker
- 26. Fecha de Java a milisegundos
- 27. Cómo restar/agregar días de/a una fecha?
- 28. Agregar a Java año calendario no funciona
- 29. agregar día a la fecha actual
- 30. Cómo agregar automáticamente la fecha de 1 año a una fecha existente en el servidor SQL
Use http://joda-time.sourceforge.net/, si es posible. – Babar
Esa [URL para Joda-Time] (http://www.joda.org/joda-time/) ha cambiado desde la publicación de Babar. –
Utilice [Fecha Java 8] (http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html) y tiempo si es posible. – peceps