Formatear con Patrones

En la sección anterior, Utilizar formatos predefinidos, describimos los estilos de formatos proporcionados por la clase DateFormat. En la mayoría de los casos, estos formatos predefinidos son suficiente. Sin embargo, si se quieren crear formatos personalizados, se debe utilizar la clase SimpleDateFormat.

En la siguientes líneas, proporcionaremos varios ejemplos de código que demuestran el uso de los métodos de la clase SimpleDateFormat. Podrás encontrar el código completo en el fichero llamado SimpleDateFormatDemo.java.

Sobre los Patrones

Cuando se crea un objeto SimpleDateFormat, se específica un patrón en un String. Los contenidos de este patrón determinan el formato de la fecha y de la hora. Para una descripción completa sobre la síntaxis de los patrones puedes ver las tablas de la sección Síntaxis de los Patrones de Formato de Fechas. Podremos ver algunos ejemplos de patrones en los siguientes ejemplos.

En el siguiente código hemos específicado el patrón cuando se crea el objeto SimpleDateFormat y luego llamamos al método format. El String devuelto por el método format contiene la fecha y hora formateadas y está lista para mostrarse.

Date today;
String output;
SimpleDateFormat formatter;

formatter = new SimpleDateFormat(pattern, currentLocale);
today = new Date();
output = formatter.format(today);

System.out.println(pattern + "   " + output);
La tabla siguiente muestra la salida generada por el código anterior cuando se especifica la localidad de U.S.:

patrónSalida
dd.MM.yy09.04.98
yyyy.MM.dd G 'at' hh:mm:ss z1998.04.09 AD at 06:15:55 PDT
EEE, MMM d, ''yyThu, Apr 9, '98
h:mm a6:15 PM
H:mm18:15
H:mm:ss:SSS18:15:55:624
K:mm a,z6:15 PM,PDT
yyyy.MMMMM.dd GGG hh:mm aaa1998.April.09 AD 06:15 PM

Patrones y Localidades

La clase SimpleDateFormat es sensible a la localidad. Si se ejemplariza SimpleDateFormat sin un parámetro Locale, formateará la fecha y hora de acuerdo a la Localidad por defecto. Tanto el patrón como la Localidad determinan el formato. Para el mismo patrón, la clase SimpleDateFormat podría formatear la fecha y la hora de forma diferente si varía la Localidad.

En el siguiente ejemplo, el patrón está codificado en la sentencia que crea el objeto SimpleDateFormat:

Date today;
String result;
SimpleDateFormat formatter;

formatter = new SimpleDateFormat("EEE d MMM yy", currentLocale);
today = new Date();
result = formatter.format(today);

System.out.println("Locale: " + currentLocale.toString());
System.out.println("Result: " + result);
El código anterior genera esta salida. Aunque el patrón esté codificado,el formato de la fecha cambia cada vez que se especifica una Localidad diferente:
Locale: fr_FR
Result: ven 10 avr 98

Locale: de_DE
Result: Fr 10 Apr 98

Locale: en_US
Result: Thu 9 Apr 98

Ozito