## Utilizar Formatos Predefinidos

La clase DateFormat permite formatear fechas y horas con estilos predefinidos de una forma sensible a la Localidad, DateFormat no soporta todas las posibles definiciones de Localidades. Para ver las definiciones de Locale que reconoce DateFormat, llamamos al método getAvailableLocales:

    Locale[] locales = DateFormat.getAvailableLocales();

En las siguientes secciones, veremos cómo formatear fechas y horas con la clase DateFormat. Los ejemplos se han sacado el programa DateFormatDemo.java.

#### Fechas

Formatear fechas con la clase DateFormat es un proceso en dos pasos. Primero se crea un formateador con el método getDateInstance. Segundo, se llama al método format, que devuelve un String que contiene la fecha formateada. En el siguiente ejemplo, hemos formateado la fecha de hoy llamando a estos dos métodos:

    Date today;
    String dateOut;
    DateFormat dateFormatter;

    dateFormatter =
       DateFormat.getDateInstance(DateFormat.DEFAULT, currentLocale);
    today = new Date();
    dateOut = dateFormatter.format(today);

    System.out.println(dateOut + "   " + currentLocale.toString());

Aquí está la salida generada por este código. Observa que los formatos de fechas varían con la Localidad. Como DateFormat es sensible a la Localidad, tiene cuidado de los detalles de formateo para cada Localidad.

    9 avr 98   fr_FR
    9.4.1998   de_DE
    09-Apr-98   en_US

En el ejemplo de código anterior, hemos específicado el estilo de formato DEFAULT. Este estilo es sólo uno de los estilos de formato predefinidos que proporciona la clase DateFormat:

- DEFAULT
- SHORT
- MEDIUM
- LONG
- FULL

La siguiente tabla muestra cómo se formatea cada estilo para las Localidades de U.S. y Francia:

Estilo | Localidad U.S. | Localidad Francia
--- | --- | ---
DEFAULT | 10-Apr-98 | 10 avr 98
SHORT | 4/10/98 | 10/04/98
MEDIUM | 10-Apr-98 | 10 avr 98
LONG | April 10, 1998 | 10 avril 1998
FULL | Friday, April 10, 1998 | vendredi, 10 avril 1998

#### Horas

Los objetos Date representan tanto fechas como horas. Formatear horas con la clase DateFormat es similar al formateo de fechas, excepto en que el formateador se crea con el método getTimeInstance:

    DateFormat timeFormatter =
       DateFormat.getTimeInstance(DateFormat.DEFAULT, currentLocale);

La siguiente tabla muestra los estilos de formatos predefinidos para las horas en las localidades de U.S. y Alemania:

Estilo | Localidad U.S. | Localidad Alemania
--- | --- | ---
DEFAULT | 3:58:45 PM | 15:58:45
SHORT | 3:58 PM | 15:58
MEDIUM | 3:58:45 PM | 15:58:45
LONG | 3:58:45 PM PDT | 15:58:45 GMT+02:00
FULL | 3:58:45 oclock PM PDT | 15.58 Uhr GMT+02:00

#### Fechas y Horas

Para mostrar la fecha y la hora en la misma String, se crea el formateador con el método getDateTimeInstance. El primer parámetro es el estilo de fecha y el segundo es el estilo de la hora. El tercer parámetro es nuestro viejo amigo Locale. Aquí tienes un ejemplo rápido:

    DateFormat formatter;

    formatter = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                               DateFormat.LONG,
                                               currentLocale);

Para la localidad de U.S., el formateado de este ejemplo, formateará la fecha y la hora de esta forma:

    April 10, 1998 4:05:54 PM PDT

Si el ejemplo del formateador se hubiera creado con la Localidad Francia, el String devuelto por el método format sería:

    11 avril 1998 01:05:54 GMT+02:00

Ozito