La clase DateFormat de Java permite dar formato habitual a objetos Date que almacenan valores de tiempo, lo cual posibilita mostrar en pantalla fechas y horas con una estética adecuada.

Esta clase dispone de los métodos getDateInstancegetTimeInstance para instanciar objetos DateFormat:

En cualquiera de los dos casos puedes observar que se debe pasar un parámetro de tipo int para indicar el formato que se quiere aplicar a las fechas u horas. Para ello, esta misma clase DateFormat ofrece una serie de propiedades constantes estáticas que facilitan su uso:

  • SHORT: Formato de fechas: 6/10/12, y formato de horas: 21:47
  • MEDIUM: Formato de fechas: 06-oct-2012, y formato de horas: 21:47:32
  • LONG: Formato de fechas: 6 de octubre de 2012, y formato de horas: 21:47:32 CEST
  • FULL: Formato de fechas: sábado 6 de octubre de 2012, y formato de horas: 21H47' CEST

Sobre los objetos DateFormat se puede utilizar el método format para obtener como String la fecha y hora a la que se desea dar formato. En su formato más sencillo, al método format hay que pasarle como parámetro un objeto Date, que se puede obtener a partir de un objeto Calendar usando el método getTime de esa clase Calendar.

Class DateFormat

String format(Date date)

Class Calendar

Date getTime()

//Obtener la fecha y hora actual
Calendar cal = Calendar.getInstance();
 
//Fecha en formato SHORT: 6/10/12
DateFormat formateadorFechaCorta = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(formateadorFechaCorta.format(cal.getTime()));
 
//Fecha en formato MEDIUM: 06-oct-2012
DateFormat formateadorFechaMedia = DateFormat.getDateInstance(DateFormat.MEDIUM);
System.out.println(formateadorFechaMedia.format(cal.getTime()));
 
//Fecha en formato LONG: 6 de octubre de 2012
DateFormat formateadorFechaLarga = DateFormat.getDateInstance(DateFormat.LONG);
System.out.println(formateadorFechaLarga.format(cal.getTime()));
 
//Fecha en formato FULL: sábado 6 de octubre de 2012      
DateFormat formateadorFechaCompleta = DateFormat.getDateInstance(DateFormat.FULL);
System.out.println(formateadorFechaCompleta.format(cal.getTime()));
 
//Hora en formato SHORT: 21:47      
DateFormat formateadorHoraCorta = DateFormat.getTimeInstance(DateFormat.SHORT);
System.out.println(formateadorHoraCorta.format(cal.getTime()));
 
//Hora en formato MEDIUM: 21:47:32      
DateFormat formateadorHoraMedia = DateFormat.getTimeInstance(DateFormat.MEDIUM);
System.out.println(formateadorHoraMedia.format(cal.getTime()));
 
//Hora en formato LONG: 21:47:32 CEST     
DateFormat formateadorHoraLarga = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println(formateadorHoraLarga.format(cal.getTime()));
 
//Hora en formato FULL: 21H47' CEST   
DateFormat formateadorHoraCompleta = DateFormat.getTimeInstance(DateFormat.FULL);
System.out.println(formateadorHoraCompleta.format(cal.getTime()));
 
//Fecha en formato FULL estadounidense: Saturday, October 6, 2012    
DateFormat formateadorFechaUS = DateFormat.getDateInstance(DateFormat.FULL, new Locale("US"));
System.out.println(formateadorFechaUS.format(cal.getTime())); 

Como puedes observar en las últimas líneas del ejemplo, el método getDateInstance admite un segundo parámetro en el que se debe indicar un objeto Locale que haga referencia al idioma o país sobre el que se quiere obtener el formato de fecha y hora.

Para un control más personalizado del formato deseado, se puede utilizar la clase SimpleDateFormat de Java, que es una extensión de la clase DateFormat comentada anteriormente. La clase SimpleDateFormat utiliza en el método constructor una cadena de caracteres como patrón para establecer el formato de fecha y hora.

Para ello se dispone de una lista de caracteres asociados a cada uno de los posibles campos de fecha y hora. Por ejemplo, el caracter 'd' hace referencia al día, o 'y' que hace referencia al año.

simpledateformat01

En función de la repetición que se haga de esos caracteres del patrón, se obtienen distintos formatos para un mismo dato. Así si se indica como parte del patrón "yy" se mostrará el año con 2 dígitos, mientras que se escribe como "yyyy" se mostrará en año con 4 dígitos.

simpledateformat02 

Además puedes introducir cualquier texto dentro del patrón para que forme parte del formato final. Para ello simplemente debes encerrar entre comillas simples el texto literal.

Por ejemplo, para obtener la fecha en formato "Son las 21:47 del sábado 6 de octubre de 2012" se usaría el siguiente trozo de código fuente:

Calendar cal = Calendar.getInstance();
//Mostrar hora y fecha con formato: "Son las 21:47 del sábado 6 de octubre de 2012"
String patron = "'Son las' hh:mm 'del' EEEE d 'de' MMMM 'de' YYYY";
SimpleDateFormat formatoFechaPersonal = new SimpleDateFormat(patron);
System.out.println(formatoFechaPersonal.format(cal.getTime()));