bibigeek.com  Tu blog de Programación Geek: Java, php, J2EE... y mucho más

Mi primer POST, que bien suena ¿verdad?… va para Kuanale y Nieto, a ver si aprendéis JAVA :p

Java y las fechas, las fechas y java…Los programadores Java, al menos en mi caso, tenemos algunos que otros problemas con las fechas en Java. En el trabajo hemos tenido graves problemas con ellas, y más, como es en el Sector Turístico. Si no os queda algo claro de lo que expondré no dudéis en contactar conmigo y os ayudaré de mucho gusto, o en el caso que no estéis de acuerdo conmigo también, se agradecerá vuestra colaboración…

Formateo de Fechas en Java

En varias ocasiones (por no decir en todas) tendremos que trabajar con fechas. En Java no es que sea difícil ni mucho menos, sólo es entender Java su API (API Java 6) y poca cosa más.

La clase que utilizaremos para parsear una fecha es: SimpleDateFormat, que pernetece a la librería estándard java.text.

Si tenemos un atributo (variable) de la clase Date o recuperamos una fecha desde una Base de Datos, se podrá parsear/formatearla según la necesidad o gusto de cada uno, siempre y cuando se especifique las opciones de la siguiente manera (alerta, es keysensitve, por lo tanto hay que especificarlo tal cual):

  • Formato Numérico (básicos)
    • Días. Los días se especifican como: ‘dd’
    • Mes. El mes en forma numérica se exprasa indicandolo de la siguiente forma: ‘MM’. Sí sí, está en mayúscula tenedlo en cuenta sinó lo reconocerá como minutos
    • Año. El año se puede mostrar de dos formas, los dos últimos dígitos (‘yy’) o mostrando el año entero (‘yyyy’)
    • Horas. Especificar las horas, minutos y segundos nos servirá para ser más minuciosos a la hora de hacer nuestros proyectos, y alguno de los casos lo necesitaremos con gran relevancia. Las horas la podemos expresar realmente desde Java en cuatro Formatos distintos: 12h (1-12), 12h (0 – 11), 24h (1-24) y finalmente 24h (0 – 23). Cada una se tiene que indicar de distinta forma, para expresarlas respectivamente: ‘hh’, ‘kk’, ‘HH’ y ‘KK’.
    • Minutos. Indicando ‘mm’ mostraremos los minutos
    • Segundos. Basta con poner ’ss’.
    • Milisegundos. Los milisegundos para que se muestren los milisegundos se deberá indicar como: ‘SSS’. Las ‘S’ están en mayúsculas, alerta
  • Formato Texto
    • Día. También podemos expresar el día de la semana en la que estamos en formato texto. Al igual que el mes, tenemos dos formas, el abreviado o el completo. Para mostrar el día de la semana lo podemos indicar de las siguientes formas: ‘E’, ‘EE’ o ‘EEE’ de forma abreviada; ‘EEEE’ para el completol. Por ejemplo, si estamos en Martes, la forma abreviada sería Mar, en cambio el completo sería Martes.
    • Mes. A diferencia del día de la semana, para expresar el Mes tenemos: ‘MMM’ para el abreviado, ‘MMMM’ para el completo. Por ejemplo Marzo, se expresará como Mar en el abreviado, en el otro caso se mostrará Marzo.
    • AM/PM. Según el formato de horas seleccionado, ya sea 12h o 24h, nos será muy interesante direnciar si estamos en AM o en PM, para ello tenemos que indicarle al objeto SimpleDateFormat el carácter:  ’a’. Solo indicando la ‘a’ nos mostrará si es AM o PM.

Hasta aquí el rollazo de la teoría… pasemos a lo que realmento importa y nos será de mucha ayuda, los ejemplos. En este ejemplo expongo el código java con una fecha y la parseo de diferentes formas. Con ello obtengo una serie de resultados que tambíen podréis visualizar. Vayamos a ello:

Código JAVA:

public static void main(String[] args) {

/* creamos un atributo con el valor de la fecha actual */

        Date date = new Date();
        /* FORMATOS QUE SE VAN A MOSTRAR */
            /* FORMATO NUMERICO EUROPEO CON BARRAS */
            String formato1 = new String("dd/MM/yyyy");

            /* EUROPEO SIN BARRAS */
            String formato2 = new String("ddMMyyyy");

            /* FORMATO EUROPERO MOSTRANDO DOS DIGITOS EN EL ANYO Y SEPARADOS POR GUION */
            String formato3 = new String("dd-MMM-yy");

            /* FORMATO AMERICANO SEPARADO CON BARRAS */
            String formato4 = new String("MM/dd/yyyy");

            /* MOSTRAMOS LA HORA EN FORMATO 12h, SI ES AM O PM, EL MES EN TEXTO, EL DIA Y EL ANYO */
            String formato5 = new String("hh:mm:ss a MMM dd, yyyy");

            /* Imprimimos la hora en formato 24h, IMPORTANTE LOS MILISEGUNDOS TAMBIEN DIA Y MES*/
            String formato6 = new String("HH:mm:ss:SSS dd MM");

            /* DIA NUMERO, DIA TEXTO ABREVIADO Y HORA EN FORMATO 24H */
            String formato7 = new String("dd E HH:mm:ss:SSS");

            /* DIA NUMERO, DIA TEXTO ABREVIADO Y HORA EN FORMATO 24H */
            String formato8 = new String("dd EEEE HH:mm:ss:SSS");

            /* DIA DE LA SEMANA, DIA NUMERO, MES TEXTO ENTERO, ANYO  */
            String formato9 = new String("E dd, MMMM yyyy");

        /* IMPRIMIMOS LA FECHA */
        System.out.println("La fecha es: " + date);

        /* IMPRIMIMOS LA FECHA PARSEADA SEGUN LOS FORMATOS */
        SimpleDateFormat formatoSimple = new SimpleDateFormat(formato1);
        System.out.println("Formato1: " + formatoSimple.format(date));

        formatoSimple.applyPattern(formato2);
        System.out.println("Formato2: " + formatoSimple.format(date));

        formatoSimple.applyPattern(formato3);
        System.out.println("Formato3: " + formatoSimple.format(date));

        formatoSimple.applyPattern(formato4);
        System.out.println("Formato4: " + formatoSimple.format(date));

        formatoSimple.applyPattern(formato5);
        System.out.println("Formato5: " + formatoSimple.format(date));

        formatoSimple.applyPattern(formato6);
        System.out.println("Formato6: " + formatoSimple.format(date));

        formatoSimple.applyPattern(formato7);
        System.out.println("Formato7: " + formatoSimple.format(date));

        formatoSimple.applyPattern(formato8);
        System.out.println("Formato8: " + formatoSimple.format(date));

        formatoSimple.applyPattern(formato9);
        System.out.println("Formato9: " + formatoSimple.format(date));
}

Resultado:


La fecha es: Tue Mar 03 14:47:59 CET 2009

Formato1: 03/03/2009
Formato2: 03032009
Formato3: 03-mar-09
Formato4: 03/03/2009
Formato5: 02:47:59 PM mar 03, 2009
Formato6: 14:47:59:265 03 03
Formato7: 03 mar 14:47:59:265
Formato8: 03 martes 14:47:59:265
Formato9: mar 03, marzo 2009

2 Comentarios

  1. walter on Octubre 2, 2009 3:54 pm

    gracias men, muy buen aporte para los principiantes

  2. juan carlos on Febrero 15, 2010 8:01 pm

    gracias por esto ya hice eso y efectivamente formatee la fecha ahora el problema es que a la hora de insertar en la db que es postgre 8.4 me manda error estoy trabajando con el dataprovider y esto es lo que le mando
    DateFormat df = new SimpleDateFormat(“yyyy-MM-dd”);
    String f = df.format(this.fecha.getSelectedDate());
    java.util.Date date = null;
    try {
    date = df.parse(f);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    ahora lo formateo asi porque en postgre el formato que esta es ese yyyy-MM-dd
    En el boton guardar tengo esto asi
    this.donacionDataProvider.setValue(“fecha_donacion”, row, date);
    y este es el error error: java.lang.RuntimeException: Number of conflicts while synchronizing: 1 SyncResolver.INSERT_ROW_CONFLICT row 0 Can’t infer the SQL type to use for an instance of java.util.Date. Use setObject() with an explicit Types value to specify the type to use. me podrias ayudar gracias

Escribe un Comentario