• No se han encontrado resultados

Forme fecha y hora empleando Formatter

In document Java soluciones de programación (página 154-159)

Componentes clave

Clases Métodos

java.util.Formatter Formatter format(String cadFmt, Object ... args) java.util.Calendar static Calendar getInstance( ) java.util.Date

Uno de los especifi cadores de conversión más poderosos proporcionados por Formatter es %t, que forma información de fecha y hora. Debido a la amplia variedad de formatos en que puede representarse la hora y la fecha, el especifi cador %t soporta muchas opciones. Por ejemplo, la hora puede representarse empleando un reloj de 12 o 24 horas. La fecha puede mostrarse usando formas

cortas, como 15/10/2008, o largas, como miércoles, 15 de octubre, 2008. Las opciones de fecha y hora se especifi can empleando uno o más de los sufi jos que siguen al formato t. En esta solución se describe el proceso.

Paso a paso

Para formar la fecha, la hora, o ambas, siga estos pasos: 1. Cree un objeto de Formatter.

2. Empleando los sufi jos mostrados en la tabla 4-3 para indicar el formato preciso, cree un especifi cador de formato %t que describa la manera en que quiera desplegar la fecha, la hora, o ambos.

3. Obtenga una instancia que contenga la fecha y la hora que desee formar. Esto debe ser un objeto de tipo Calendar, Date, Long o long.

4. Pase el especifi cador de formato y la hora a format( ) para crear un valor formado.

Análisis

Para conocer una descripción de los constructores de Formatter y el método format( ), consulte Revisión general de Formatter, presentada cerca del principio de este capítulo.

El especifi cador %t funciona un poco diferente que otros porque requiere el uso de un sufi jo para describir la parte y el formato precisos de la fecha y la hora deseados. Los sufi jos se muestran en la tabla 4-3. Por ejemplo, para desplegar minutos, usaría %tM, donde M indica minutos en un campo de dos caracteres. El argumento correspondiente al especifi cador %t debe ser de tipo Calendar, Date, Long o long.

El especifi cador %t causa que cualquier información alfabética asociada con la fecha y la hora, como los nombres de días o el indicador AM/FM, se desplieguen en minúsculas. Si quiere desplegar estos elementos en mayúsculas, use, en cambio, %T.

Como ya se explicó, el argumento que corresponde a %t debe ser una instancia de Calendar, Date, Long o long. Sin embargo, con más frecuencia usará una instancia de Calendar o de Date (que a menudo contendrán la fecha y la hora actuales del sistema). Tanto Calendar como Date están empaquetados en java.util.

Para obtener la fecha y la hora actuales usando Calendar, llame al método de fábrica getInstance( ). Aquí se muestra:

static Calendar getInstance( )

Devuelve una instancia de Calendar que contiene la fecha y hora en que se creó el objeto. Para obtener la fecha y la hora actuales usando Date, simplemente cree un objeto de Date empleando este constructor:

Date( )

Esto crea una instancia de Date( ), que contiene la fecha y la hora actuales del sistema.

Como se muestra en la tabla 4-3, Formatter le da un control muy detallado del formato de la información de fecha y hora. La mejor manera de comprender el efecto de cada sufi jo consiste en experimentar.

Sufi jo Se reemplaza con

a Nombre de día de la semana abreviado

A Nombre completo de día de la semana

b Nombre abreviado de mes

B Nombre completo del mes

c Cadena de fecha y hora estándar, formada como mes día hh::mm::ss zona año

C Primeros dos dígitos del año

d Día del mes como decimal (01-31)

D mes/día/año

e Día del mes como decimal (1-31)

F año-mes-día

h Nombre del mes abreviado

H Hora (00 a 23)

I Hora (01 a 12)

j Día del año como decimal (001 a 366)

k Hora (0 a 23)

l Hora (01 a 12)

L Milisegundo (000 a 999)

m Mes como decimal (01 a 13)

M Minuto como decimal (00 a 59)

N Nanosegundo (000000000 a 999999999)

p Equivalente local de AM o PM en minúsculas

Q Milisegundos desde 1/1/1970

r hh:mm:ss (formato de 12 horas)

R hh:mm (formato de 24 horas)

S Segundos (00 a 60)

s Segundos desde 1/1/1970 UTC

T hh:mm:ss (formato de 24 horas)

y Año en decimales sin siglo (00 a 99)

Y Año en decimales incluyendo siglo (0001 a 9999)

z Desplazamiento desde UTC

Z Nombre de la zona horaria

Ejemplo

He aquí un programa que demuestra una variedad de formatos de fecha y hora. Observe algo más en este programa: la última llamada a format( ) usa indizamiento relativo para permitir que el mismo valor de datos sea usado por tres especifi cadores de formato. Aquí se muestra esta línea: fmt.format("Hora y minuto: %t1:%1$tM %1$Tp", cal);

Debido al indizamiento relativo, el argumento cal sólo necesita pasarse una vez, en lugar de tres veces.

// Despliega varios formatos de hora y fecha // empleando el especificador %t con Formatter. import java.util.*;

class FechaYHora {

public static void main(String args[]) { Formatter fmt = new Formatter( ); // Obtiene la fecha y hora actuales. Calendar cal = Calendar.getInstance( ); // Despliega el formato de 12 horas.

fmt.format("Hora usando el reloj de 12 horas: %tr\n", cal); // Despliega el formato de 24 horas.

fmt.format("Hora usando el reloj de 24 horas: %tT\n", cal); // Despliega el formato de fecha corta.

fmt.format("Formato de fecha corta: %tD\n", cal); // Despliega la fecha usando nombres completos. fmt.format("Formato de fecha larga: ");

fmt.format("%tA %1$tB %1$td, %1$tY\n", cal); // Despliega información completa de fecha y hora. // La primera versión usa minúsculas.

// La segunda versión usa mayúsculas.

// Como se explicó, las mayúsculas se seleccionan // usando %T en lugar de %t.

fmt.format("Hora y fecha en min\u00a3sculas: %tc\n", cal); fmt.format("Hora y fecha en may\u00a3sculas: %Tc\n", cal); // Despliega la hora y el minuto, e incluye un indicador // de AM o PM. Observe que se usa %T en mayúsculas. // Esto hace que AM o PM esté en mayúsculas.

// Despliega las fechas y horas formadas. System.out.println(fmt);

} }

Aquí se muestra la salida:

Hora usando el reloj de 12 horas: 06:53:10 PM Hora usando el reloj de 24 horas: 18:53:10 Formato de fecha corta: 03/30/08

Formato de fecha larga: domingo marzo 30, 2008

Hora y fecha en minúsculas: dom mar 30 18:53:10 CST 2008 Hora y fecha en mayúsculas: DOM MAR 30 18:53:10 CST 2008 Hora y minuto: 6:53 PM

Opciones

Como ya se mencionó, la hora, la fecha o ambas pueden estar en un objeto de Calendar, Date, Long o long. En el ejemplo se usa un objeto de Calendar, pero puede usar uno de los otros objetos si son más convenientes. Por ejemplo, he aquí una manera de reescribir la primera llamada a format( ): fmt.format("Hora usando el reloj de 12 horas: %tr\n", new Date);

Pasa una instancia de Date, en lugar de una de Calendar.

Una versión larga de la fecha y la hora puede obtenerse de Calendar al llamar a getTimeInMillis( ), y de Date al llamar a getTime( ).

Si quiere usar algo diferente de la hora y la fecha actuales del sistema, puede usar el método set( ) defi nido por Calendar para establecer la fecha y la hora. Como opción, puede usar GregorianCalendar, que es una subclase de Calendar. Proporciona constructores que le permiten especifi car la

fecha y la hora de manera explícita. Por ejemplo, aquí la fecha y la hora se construyen usando GregorianCalendar:

fmt.format("Hora y fecha en min\u00a3sculas: %tc\n",

new GregorianCalendar(2007, 1, 28, 14, 30, 0)); La fecha se establece en febrero 28, 2007. La hora es 2:30:00 pm.

Una opción importante para el formato de fecha y hora es java.text.DateFormat. Ofrece una manera diferente de crear formatos de hora y fecha que pudiera ser más fácil usar en algunos casos. De especial interés es su subclase SimpleDateFormat, que le permite especifi car la hora y la fecha al usar un patrón. (Consulte Forme fecha y hora con DateFormat y Forme fecha y hora con patrones empleando SimpleDateFormat).

Aunque Formatter usa como opción predeterminada la confi guración de región y de idioma predeterminada, es posible especifi car explícitamente una propia. Al hacerlo, se le permite formar datos de una manera compatible con otros países e idiomas. La información local está encapsulada dentro de la clase Locale, que se encuentra empaquetada en java.util.

Hay dos maneras básicas de especifi car un idioma local cuando forma. En primer lugar, puede pasar una instancia de Locale a uno de los constructores de Formatter que habilitan confi guración local. (En la revisión general de formato, presentada al principio de este capítulo, se muestran algunos). En segundo lugar, puede usar la forma que soporta idioma local de format( ). Éste es el método que se usa en esta solución.

Paso a paso

Para formar datos en relación con una confi guración de idioma específi ca, siga estos pasos: 1. Cree u obtenga un objeto de Locale que representa el idioma local.

2. Cree un objeto de Formatter.

3. Use el método format( ) para formar los datos, especifi cando el objeto Locale. Esto causa que el formato incorpore automáticamente atributos sensibles a la confi guración de idioma.

Análisis

Para conocer una descripción de los constructores de Formatter y el método format( ), consulte Revisión general de Formatter, que se presentó cerca del principio de este capítulo.

La confi guración de región y de idioma local está representada por los objetos de Locale, que describen una región geográfi ca o cultural. Locale es una de las clases que ayudan a internacionalizar un programa. Contiene información que determina, por ejemplo, los

formatos usados para desplegar fechas, horas y números en diferentes países e idiomas. La internacionalización es un tema extenso que se encuentra más allá del alcance de este capítulo. Sin embargo, es fácil usar Locale para adecuar los formatos producidos por Formatter.

Los constructores para Locale son: Locale(String idioma)

Locale(String idioma, String pais)

Locale(String idioma, String pais, String datos)

In document Java soluciones de programación (página 154-159)