lunes, 13 de mayo de 2013

Comparando Fechas En Java

En esta entrada veremos uno de los procesos obligados cuando se trabaja en este campo del desarrollo de Software, sin importar el lenguaje que manejemos en algún momento tendremos que realizar operaciones con fechas.




En esta Ocasión y gracias a la inquietud de alguien vamos a realizar un pequeño ejemplo de como comparar dos fechas, veremos una forma fácil para definir si una fecha es menor, mayor o igual a otra, para esto usaremos la clase java.util.Date

En el siguiente ejemplo asumiremos que ingresamos una fecha a nuestra aplicación y vamos a compararla con la fecha actual del sistema, para esto almacenaremos la fecha ingresada con un formato "dd/mm/yyyy" , luego obtendremos la fecha del sistema y la convertiremos a este formato para poder realizar las comparaciones.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * @author HENAO
 *
 */
public class Principal {

 /**
  * @param args
  */
 public static void main(String[] args) {
  
 /**Objeto de la clase */
 Principal objetoPrincipal=new Principal();
  
 String fecha1 = "12/05/2013";  
 String fecha2 = "13/05/2013";  
 String fecha3 = "14/05/2013";  
  
 /**Obtenemos la fecha del sistema y la convertirmos al String
  *  con el formato en el que vamos a trabajar*/
 Date fechaActual = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yyyy");
        String fechaSistema=formateador.format(fechaActual);
        
        /**Realizamos los llamados a los metodos de ejemplo*/
        
        System.out.println("\n********************************" +
          "****************************\n");
  
 String resultadoMenor=objetoPrincipal.compararFechasConDate(fecha1,fechaSistema);
 System.out.println(resultadoMenor+"\n");
  
 System.out.println("******************************" +
    "******************************\n");
  

 String resultadoIgual=objetoPrincipal.compararFechasConDate(fecha2,fechaSistema);
 System.out.println(resultadoIgual+"\n");
  
 System.out.println("******************************" +
    "******************************\n");
  
 String resultadoMayor=objetoPrincipal.compararFechasConDate(fecha3,fechaSistema);
 System.out.println(resultadoMayor+"\n");
 
 System.out.println("*****************************" +
    "*******************************\n");
 }

 /**
  * Comparamos las Fechas
  * @author CHENAO
  * @param fecha1
  * @param fechaActual
  * @return
  */
 private String compararFechasConDate(String fecha1, String fechaActual) {  
  System.out.println("Parametro String Fecha 1 = "+fecha1+"\n" +
    "Parametro String fechaActual = "+fechaActual+"\n");  
  String resultado="";
  try {
   /**Obtenemos las fechas enviadas en el formato a comparar*/
   SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yyyy"); 
   Date fechaDate1 = formateador.parse(fecha1);
   Date fechaDate2 = formateador.parse(fechaActual);
   
   System.out.println("Parametro Date Fecha 1 = "+fechaDate1+"\n" +
     "Parametro Date fechaActual = "+fechaDate2+"\n");
   
    if ( fechaDate1.before(fechaDate2) ){
    resultado= "La Fecha 1 es menor ";
    }else{
     if ( fechaDate2.before(fechaDate1) ){
      resultado= "La Fecha 1 es Mayor ";
     }else{
      resultado= "Las Fechas Son iguales ";
     } 
    }
  } catch (ParseException e) {
   System.out.println("Se Produjo un Error!!!  "+e.getMessage());
  }  
  return resultado;
 }
}


Y listo, Si verificamos el proceso Obtenemos los siguientes resultados.


Podemos evidenciar que la comparación se realizó con las 3 fechas y gracias al método before sabemos cual es menor, mayor o si son iguales....


También te podría Interesar. 


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo....y si te gustó, te invito a compartir ;)

17 comentarios:

  1. Excelente aporte
    Esta muy claro el tema
    Muchas Gracias

    ResponderEliminar
  2. Ahora tengo otra pregunta
    Tengo que mostrar los productos que están próximos a vencer
    Como realizo eso
    Y como muestro los productos por fechas
    Sera que me puede hacer el favor de colaborarme

    ResponderEliminar
    Respuestas
    1. No estoy muy seguro de lo quiere hacer, pero si le entiendo, podría definir una fecha que sea por ahí 3 días menor a la fecha final y cada vez que se desee verificar, entonces compara la fecha actual con esa fecha de referencia (que sabemos es cercana a la final) y listo, con eso informaría que faltan 3 días para el vencimiento....

      Eliminar
  3. Date fechaActual = new Date(System.currentTimeMillis());
    Calendar c = Calendar.getInstance();
    System.out.println(c.get(Calendar.YEAR));
    System.out.println(c.get(Calendar.DAY_OF_MONTH));
    System.out.println(c.get(Calendar.DAY_OF_YEAR));
    c.set(Calendar.MONTH, 6);
    fechaActual.setTime(c.getTimeInMillis());
    System.out.println(fechaActual);

    ResponderEliminar
  4. Ojalas todos los desarrolladores ayudaran de esta manera, de seguro habría mas potencial , ya que los novatos aprenderíamos mas rápido :) .

    GRACIAS, muy buena ayuda!!! :)

    ResponderEliminar
    Respuestas
    1. Muchas Gracias por el comentario, esa es la intención, brindar opciones y colaborar ;) un saludo y te invito a que si tienes alguien al que le pueda servir el blog, le compartas ;)

      Eliminar
  5. Hola muy agradecida por tu aporte. Pero se podria hacer en JFrame, usando los controles correspondientes?, es para un curso que estoy haciendo, pero nose como aplicarlos, ya que debo gestionar turnos de un consultorio, es decir, insertar, modificar o eliminar turnos, verificar que ese turno dado no sea registrado de nuevo. Yo hice la conexion con la base de datos en SQL, pero lo que me traba es la parte visual, estoy investigando sobre jcalendar, se como agregar los controles pero ahi me quedo. Le agradeceria si pudiera ayudarme, he buscado por muchos sitios, pero mis conocimientos en java son muy basicos y hay cosas que no entiendo muy bien. Desde ya muy agradecida

    ResponderEliminar
    Respuestas
    1. Hola se que hay una libreria para tener un calendar en JavaSwing pero la verdad no la he mirado y no la tengo muy presente en estos momentos, sin embargo mientras tanto y si apenas estas empezando podrias usar 3 combos para el dia, mes y año, le quemas u obtienes los datos de una BD con los meses del año, los dias del 1 al 31 y pues los años dependiendo de las edades que quieras manejar hasta el año actual y listo, asi la persona elije del combo la fecha que quiere y cuando captures lo seleccionado lo puedes procesar con los ejemplos de la entrada.................. si no conoces el JcomboBox mira esta entrada, hace parte de los componentes atomicos ;)
      http://codejavu.blogspot.com/2013/09/componentes-atomicos-java-swing.html

      Eliminar
    2. ten en cuenta tambien que debes validar por ejemplo años bisiestos y meses de menos dias, pero para eso ya existen metodos en internet que te pueden servir ;)

      Eliminar
  6. Muchas gracias, por tu aporte. Se usar los comboBox, asi que me parecio muy buena la idea.
    He instalado tambien la libreria Jcalendar, que baje desde internet, y estoy viendo como probar los controles, ahora solo me queda por investigar como comparar fechas u horarios, para no asignar el mismo turno dos veces.

    ResponderEliminar
    Respuestas
    1. Hola, me alegra que te sirviera y si, si usas el JCalendar despues de capturar la selección tal vez los metodos que uso aquí te sirvan para validar la igualdad....... un saludo y suscribete, depronto hay mas cosas que te pueden servir ;)

      Eliminar
  7. Amigo muchas gracias, era exactamente lo que estaba buscando. Saludos desde Neiva. Muy buen blog.

    ResponderEliminar
  8. Excelente información! Más útil no pudo haber sido, muchas gracias! :D

    ResponderEliminar
  9. Buenisima información y bien explicada... Gracias.

    ResponderEliminar
  10. Hola buenas tardes . Cómo puedo validar si un usuario ingresa 2 fechas diferente o iguales al sistema?

    ResponderEliminar
  11. Hola, como podría extraer los meses de mi fecha actual y la otra seria de la fecha que se ingresa con jDateChooser, para luego hacer un descuento por cumplir años en el mismo mes.

    ResponderEliminar

Eres libre de realizar cualquier comentario, desde que pueda ayudar con gusto lo atenderé, y si es un critica, bienvenida sea!!!