Social

sábado, 24 de enero de 2015

Java: Sumar y restar horas en un Date

Muchas veces es necesario realizar operaciones sobre una fecha. No solamente sumar o restar horas sino también minutos, segundos, semanas, años, meses, etc. Para tal tarea existe en Java la clase Calendar. Esta clase nos permite modificar una fecha (Date) base a nuestro gusto usando los métodos que tiene predefinidos.

En el siguiente código se puede observar los cambios en un objeto del tipo Date usando Calendar.
import java.util.Calendar;
import java.util.Date;
public class DateOperation {
public static void main(String[] args){
//Establecemos la fecha que deseamos en un Calendario
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
//Desplegamos la fecha
Date tempDate = cal.getTime();
System.out.println("Fecha actual: " + tempDate);
//Le cambiamos la hora y minutos
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR)+ 2);
cal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE)- 5);
tempDate = cal.getTime();
System.out.println("Hora modificada: " + tempDate);
//Le cambiamos el mes
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)+1);
System.out.println("Fecha modificada: " + cal.getTime());
//De la misma forma se puede cambiar año, semana, etc
}
}


Al ejecutar el codigo se obtendra el siguiente resultado:

Fecha actual: Sat Jan 24 19:13:29 CST 2015
Hora modificada: Sat Jan 24 21:08:29 CST 2015
Fecha modificada: Tue Feb 24 21:08:29 CST 2015

7 comentarios :

  1. Para tu ejemplo restaste 13 -5, pero ¿cómo resto un número mayor de minutos al minuendo? si quiero restar 14 minutos, calendar.minute queda con -1 y la hora no cambia.
    Gracias
    Saludos

    ResponderEliminar
    Respuestas
    1. Hola. Los metodos set de calendario solo aceptan valores validos del para cada tipo de elemento. Por ejemplo Minuto del 0 al 59, Horas del 0 al 23, etc. Si le pones un valor fuera de este rango no realiza el cambio como dices. Para el caso que dices deberías hacer la validación y cambiar la hora y minutos.

      Eliminar
  2. hola te consulto como puedo hacer para sumar 7 dias a la fecha, pero sin que aparezca la hora, minutos y segundos?
    es mas los dias que tengo que sumar es sobre un dato que traigo de mi base de datos. espero tu respuesta. saludos y gracias

    ResponderEliminar
    Respuestas
    1. Hola Cuba!

      De la misma forma que en los horas, minutos y meses puedes usar los metodos set y get solo que con DATE. De la siguiente forma:

      cal.set(Calendar.DATE, cal.get(Calendar.DATE)+7);

      Eliminar
  3. buenas tardes ayudeme con la siguiente informacion, como puedo restar el tiempo, es decir la diferencia de tiempo

    ResponderEliminar
  4. HOLA A TODOS. Nesecito sumar de igual forma, pero al ver que no hay forma... se me ocurre algo y espero ayudarlos (supongamos que la fecha es 25/10/2020 23:45).


    Calendar cal = Calendar.getInstance();

    int dia = cal.get(Calendar.DATE);
    int mes = cal.get(Calendar.MONTH);
    int hora = cal.get(Calendar.HOUR_OF_DAY);
    int minuto = cal.get(Calendar.MINUTE);

    int nuevoMin = min + 35;
    Int nuevaHora = hora + 12;
    Int nuevoDia = dia + 15;

    If(nuevoMin > 60){
    Int x = nuevoMin-60;
    }
    If(nuevaHora > 24){
    Int y= nuevaHora-24;
    }

    If(nuevoDia > 31){
    Int z= nuevoDia -31;
    }





    Y ya imprimirlo...tienes que ver si el es es de 31 o 30, o 28, y eso es mas facil

    ResponderEliminar
    Respuestas
    1. A salida seria

      09/10/2020. 11:20


      Ya com eso puedes crear un metodo...

      Por ejemplo en el caso de los meses

      If (nuevoMes > 12){
      nuevoMes = nuevoMes-12;
      anio+1;
      }



      Eliminar