Consultar calendario de clase. Tiene un addmétodo (y algunos otros) para permitir la manipulación del tiempo. Algo como esto debería funcionar.
Calendar cal =Calendar.getInstance();// creates calendar
cal.setTime(newDate());// 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
Solo tenga cuidado si está lidiando con el horario de verano / horario de verano.
CurtainDog
55
No hace falta mencionar que puede añadir "horas negativos"
pramodc84
66
@CurtainDog Using Calendar.add()se encarga de eso automáticamente.
Jesper
66
cal.setTime (new Date ()) no es necesario: el javadoc de Calendar.getInstance () dice: "El calendario devuelto se basa en la hora actual en la zona horaria predeterminada con la configuración regional predeterminada".
También puede usar Horas negativas:DateUtils.addHours(oldDate, -1);
Kaptain
Detrás de escena, esto hace exactamente lo que hace la respuesta de Nikita, pero esto es muy simple y fácil de leer. Además, si ya usa Apache Commons / Lang ... ¿por qué no?
Matt
28
Para simplificar el ejemplo de @ Christopher.
Digamos que tienes una constante
publicstaticfinallong HOUR =3600*1000;// in milli-seconds.
Puedes escribir.
Date newDate =newDate(oldDate.getTime()+2* HOUR);
Si usa mucho tiempo para almacenar la fecha / hora en lugar del objeto Fecha, puede hacer
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 a las antiguas clases Java.util.Date/.Calendar. Esas viejas clases son notoriamente problemáticas. Evítales.
Use el toInstantmétodo recién agregado a java.util.Date para convertir del tipo antiguo al nuevo tipo java.time. Un Instantes un momento en la línea de tiempo en UTC con una resolución de nanosegundos .
Para leer esa fecha y hora, genere una Cadena en formato estándar ISO 8601 llamando toString.
String output = instantHourLater.toString();
Es posible que desee ver ese momento a través de la lente del reloj de pared de alguna región . Ajuste la Instantzona horaria deseada / esperada creando a ZonedDateTime.
Alternativamente, puede llamar plusHourspara agregar su conteo de horas. Estar dividido en zonas significa que el horario de verano (DST) y otras anomalías se manejarán en su nombre.
ZonedDateTime later = zdt.plusHours(8);
Debe evitar usar las antiguas clases de fecha y hora, incluidas java.util.Datey .Calendar. Pero si realmente necesita una java.util.Dateinteroperabilidad con clases aún no actualizadas para los tipos java.time, convierta desde ZonedDateTimevia Instant. Los nuevos métodos agregados a las clases antiguas facilitan la conversión a / desde los tipos java.time.
java.util.Date date = java.util.Date.from( later.toInstant());
Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, no hay necesidad de java.sql.*clases.
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter, y más .
+1 es un poco innecesario para esto, pero si vas a hacer más manipulación de citas, Joda Time es una gran biblioteca
Joeri Hendrickx
3
@JoeriHendrickx Si el programador agrega horas a una fecha, es muy probable que esté haciendo otro trabajo de fecha y hora. No considero que Joda-Time sea innecesario en absoluto; Lo primero que hago al configurar cualquier proyecto nuevo es agregar Joda-Time. Incluso Sun y Oracle acordaron que el viejo java.util.Date & Calendar necesita ser eliminado, por lo que agregaron el nuevo paquete java.time. * (Inspirado en Joda-Time) a Java 8.
Basil Bourque
Tuve problemas con Joda en Android. ClassNotDefinedException
Cerca pero no del todo bien. Deberías ir por una en ZonedDateTimelugar de una LocalDateTime. "Local" significa que no está vinculado a ninguna localidad en particular, y no está vinculado a la línea de tiempo. Como "La Navidad comienza a la medianoche del 25 de diciembre de 2015" es un momento diferente en las distintas zonas horarias, sin sentido hasta que aplique una zona horaria particular para obtener un momento particular en 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 en comparación.
Basil Bourque
1
También para obtener un java.util.Dateobjeto como el solicitante nos había pedido ZonedDateTime.toInstant()y Date.from()como se describe aquí stackoverflow.com/a/32274725/5661065
Este es otro código cuando su Dateobjeto está en formato de fecha y hora. La belleza de este código es que si le das más horas, la fecha también se actualizará en consecuencia.
String myString ="09:00 12/12/2014";SimpleDateFormat simpleDateFormat =newSimpleDateFormat("HH:mm dd/MM/yyyy");Date myDateTime =null;//Parse your string to SimpleDateFormattry{
myDateTime = simpleDateFormat.parse(myString);}catch(ParseException e){
e.printStackTrace();}System.out.println("This is the Actual Date:"+myDateTime);Calendar cal =newGregorianCalendar();
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 ActualDate:FriDec1209:00:00 EST 2014This is HoursAddedDate:SatDec1306:00:00 EST 2014
También puede usar: Calendar cal = Calendar.getInstance ();
Stefan Sprenger
4
Date argDate =newDate();//set your date.String argTime ="09:00";//9 AM - 24 hour format :- Set your time.SimpleDateFormat sdf =newSimpleDateFormat("dd-MMM-yyyy");SimpleDateFormat dateFormat =newSimpleDateFormat("dd-MMM-yyyy HH:mm");String dateTime = sdf.format(argDate)+" "+ argTime;Date requiredDate = dateFormat.parse(dateTime);
Duration.parse(iso8601duration)Es interesante, gracias, pero no se puede utilizar el operador +de LocalDateTime, es posible que desee editar eso. Pero .plus(...)funciona.
qlown
Gracias @qlown, supongo que el + funciona de maravilla porque así es como lo estoy usando ahora. Modificaré la respuesta en consecuencia.
Daniel
La pregunta es sobre un Dateobjeto, que representa un momento específico en UTC. Su uso de LocalDateTimeno responde a la pregunta. LocalDateTimecarece de cualquier concepto de zona horaria o desplazamiento desde UTC, y por lo tanto no puede representar un momento. Clase incorrecta para este problema. Consulte ¿Cuál es la diferencia entre Instant y LocalDateTime?
Basil Bourque
El Dateobjeto @BasilBourque está en desuso. La pregunta es ambigua cuando se trata de la zona horaria, por lo que mis respuestas se mantienen. Además, puedes cambiar LocalDateTimepor ZonedDateTime.
Daniel
4
Puedes hacerlo con Joda DateTime API
DateTime date=newDateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
La pregunta es sobre un Dateobjeto, que representa un momento específico en UTC. Su uso de LocalDateTimeno responde a la pregunta. LocalDateTimecarece de cualquier concepto de zona horaria o desplazamiento desde UTC, y por lo tanto no puede representar un momento. Clase incorrecta para este problema. Consulte ¿Cuál es la diferencia entre Instant y LocalDateTime?
Basil Bourque
0
Puede usar la clase LocalDateTime de Java 8. Por ejemplo:
long n =4;LocalDateTime localDateTime =LocalDateTime.now();System.out.println(localDateTime.plusHours(n));
La pregunta es sobre un Dateobjeto, que representa un momento específico en UTC. Su uso de LocalDateTimeno responde a la pregunta. LocalDateTimecarece de cualquier concepto de zona horaria o desplazamiento desde UTC, y por lo tanto no puede representar un momento. Clase incorrecta para este problema. Consulte ¿Cuál es la diferencia entre Instant y LocalDateTime?
Basil Bourque
-1
Puede usar este método, es fácil de entender e implementar:
Este enfoque ya se presentó en otra respuesta publicada hace años. No veo cómo este agrega más valor.
Basil Bourque
El valor agregado de mi propuesta es la simplicidad y facilidad de implementación, el usuario solo tiene que pegarlo y usarlo y agregar las horas, minutos o segundos, como saben, el nivel de Principiantes difiere y si las respuestas propuestas se combinan entre respuestas simples y respuestas avanzadas será apreciable :)
Respuestas:
Consultar calendario de clase. Tiene un
add
método (y algunos otros) para permitir la manipulación del tiempo. Algo como esto debería funcionar.Verifique API para más.
fuente
Calendar.add()
se encarga de eso automáticamente.java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y Java 9. Consulte el Tutorial de Oracle .Si usa Apache Commons / Lang , puede hacerlo en un solo paso usando
DateUtils.addHours()
:(El objeto original no ha cambiado)
fuente
DateUtils.addHours(oldDate, -1);
Para simplificar el ejemplo de @ Christopher.
Digamos que tienes una constante
Puedes escribir.
Si usa mucho tiempo para almacenar la fecha / hora en lugar del objeto Fecha, puede hacer
fuente
tl; dr
O…
Usando java.time
El marco java.time integrado en Java 8 y posterior suplanta a las antiguas clases Java.util.Date/.Calendar. Esas viejas clases son notoriamente problemáticas. Evítales.
Use el
toInstant
método recién agregado a java.util.Date para convertir del tipo antiguo al nuevo tipo java.time. UnInstant
es un momento en la línea de tiempo en UTC con una resolución de nanosegundos .Puede agregar horas a eso
Instant
pasando unTemporalAmount
tal comoDuration
.Para leer esa fecha y hora, genere una Cadena en formato estándar ISO 8601 llamando
toString
.Es posible que desee ver ese momento a través de la lente del reloj de pared de alguna región . Ajuste la
Instant
zona horaria deseada / esperada creando aZonedDateTime
.Alternativamente, puede llamar
plusHours
para agregar su conteo de horas. Estar dividido en zonas significa que el horario de verano (DST) y otras anomalías se manejarán en su nombre.Debe evitar usar las antiguas clases de fecha y hora, incluidas
java.util.Date
y.Calendar
. Pero si realmente necesita unajava.util.Date
interoperabilidad con clases aún no actualizadas para los tipos java.time, convierta desdeZonedDateTime
viaInstant
. Los nuevos métodos agregados a las clases antiguas facilitan la conversión a / desde los tipos java.time.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"? .
Sobre java.time
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como
java.util.Date
,Calendar
, ySimpleDateFormat
.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 Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, no hay necesidad de
java.sql.*
clases.¿Dónde obtener las clases java.time?
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como
Interval
,YearWeek
,YearQuarter
, y más .fuente
Con Joda-Time
fuente
ClassNotDefinedException
Desde Java 8:
Ver
LocalDateTime
API .fuente
ZonedDateTime
lugar de unaLocalDateTime
. "Local" significa que no está vinculado a ninguna localidad en particular, y no está vinculado a la línea de tiempo. Como "La Navidad comienza a la medianoche del 25 de diciembre de 2015" es un momento diferente en las distintas zonas horarias, sin sentido hasta que aplique una zona horaria particular para obtener un momento particular en 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 en comparación.java.util.Date
objeto como el solicitante nos había pedidoZonedDateTime.toInstant()
yDate.from()
como se describe aquí stackoverflow.com/a/32274725/5661065Usando la nueva clase java.util.concurrent.TimeUnit puedes hacerlo así
fuente
Algo como:
fuente
java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y Java 9. Consulte el Tutorial de Oracle .Este es otro código cuando su
Date
objeto está en formato de fecha y hora. La belleza de este código es que si le das más horas, la fecha también se actualizará en consecuencia.Aquí está la salida:
fuente
fuente
Si está dispuesto a usar
java.time
, aquí hay un método para agregar duraciones con formato ISO 8601:fuente
Duration.parse(iso8601duration)
Es interesante, gracias, pero no se puede utilizar el operador+
deLocalDateTime
, es posible que desee editar eso. Pero.plus(...)
funciona.Date
objeto, que representa un momento específico en UTC. Su uso deLocalDateTime
no responde a la pregunta.LocalDateTime
carece de cualquier concepto de zona horaria o desplazamiento desde UTC, y por lo tanto no puede representar un momento. Clase incorrecta para este problema. Consulte ¿Cuál es la diferencia entre Instant y LocalDateTime?Date
objeto @BasilBourque está en desuso. La pregunta es ambigua cuando se trata de la zona horaria, por lo que mis respuestas se mantienen. Además, puedes cambiarLocalDateTime
porZonedDateTime
.Puedes hacerlo con Joda DateTime API
fuente
mediante el uso de clases Java 8. Podemos manipular la fecha y la hora muy fácilmente como a continuación.
fuente
Date
objeto, que representa un momento específico en UTC. Su uso deLocalDateTime
no responde a la pregunta.LocalDateTime
carece de cualquier concepto de zona horaria o desplazamiento desde UTC, y por lo tanto no puede representar un momento. Clase incorrecta para este problema. Consulte ¿Cuál es la diferencia entre Instant y LocalDateTime?Puede usar la clase LocalDateTime de Java 8. Por ejemplo:
fuente
Date
objeto, que representa un momento específico en UTC. Su uso deLocalDateTime
no responde a la pregunta.LocalDateTime
carece de cualquier concepto de zona horaria o desplazamiento desde UTC, y por lo tanto no puede representar un momento. Clase incorrecta para este problema. Consulte ¿Cuál es la diferencia entre Instant y LocalDateTime?Puede usar este método, es fácil de entender e implementar:
fuente