Cambiando el formato de fecha y hora en patrones predeterminados

Una de las formas en que podemos formatear un valor de tipo DateTime consiste en utilizar su método ToString, pasando al mismo una cadena de formato. Si por ejemplo, queremos obtener una fecha y hora con un formato completo, proporcionado «de serie» por la plataforma, pasaremos la cadena «F» a este método, como vemos a continuación:


Dim dtFecha As DateTime = DateTime.Now

‘ mostrar la fecha con el patrón predeterminado
‘ de formato completo para fecha y hora
MessageBox.Show(dtFecha.ToString(«F»))

‘ resultado –> domingo, 16 de diciembre de 2007 18:37:11


Pero supongamos que queremos un formato más personalizado para visualizar el valor de esta variable, algo un poquito rebuscado como esto:



hora 18:57 fecha Diciembre/16/2007



Por supuesto que podríamos resolver el problema sustituyendo, en el método DateTime.ToString, la cadena con el patrón de formato «F» por una cadena que contuviera la combinación adecuada de caracteres especiales de formato, que ofreciera la salida que acabamos de indicar.


Pero he aquí que resulta que en nuestra aplicación hemos utilizado este dichoso patrón de formato en un gran número de lugares, y realizar estas sustituciones sería un trabajo bastante largo y farragoso 8-(


Es por ello, que una posible solución sería la que proponemos a continuación:


En primer lugar, declarar los espacios de nombre System.Globalization y System.Threading en nuestro código.


A continuación instanciar un objeto de la clase DateTimeFormatInfo, cuyos miembros contienen la información de las diversas características de formato a aplicar a una fecha. Para nuestro caso particular, el patrón de formato «F», si asignamos una cadena a la propiedad FullDateTimePattern, cambiaremos dicho formato predeterminado por uno propio.


Dado que en esta nueva cadena de formato vamos a mostrar el nombre del mes, tendremos que asignar también a la propiedad MonthNames, un array con los nombres de los meses (¡¡atención!!, de trece elementos, el último vacío), ya que en caso contrario, el nombre se mostrará en inglés.


Seguidamente, para poder hacer efectiva esta nueva configuración de formato para las fechas de la aplicación, deberemos cambiarla en la configuración cultural del programa. Esto lo conseguiremos obteniendo, de la hebra actual en ejecución, su objeto CultureInfo, y a su propiedad DateTimeFormat asignaremos el objeto DateTimeFormatInfo que hemos creado anteriormente. Finalizaremos la operación volviendo a asignar el objeto CultureInfo a la hebra principal en ejecución, y a partir de ese momento, el nuevo patrón de formato será aplicado en todos aquellos puntos de nuestro código en los que utilicemos DateTime.ToString(«F»).


El código a utilizar sería el siguiente:


Imports System.Globalization
Imports System.Threading
‘….
‘….
‘ obtener la fecha
Dim dtFecha As DateTime = DateTime.Now

‘ crear un objeto para modificar la configuración
‘ de formato completo para las fechas
Dim oDateTimeFormatInfo As DateTimeFormatInfo = New DateTimeFormatInfo()

‘ asignar la cadena de formato y un array con los nombres de los meses
oDateTimeFormatInfo.FullDateTimePattern = «hora HH:mm fecha MMMM/dd/yyyy»
oDateTimeFormatInfo.MonthNames = New String() {«Enero», _
«Febrero», _
«Marzo», _
«Abril», _
«Mayo», _
«Junio», _
«Julio», _
«Agosto», _
«Septiembre», _
«Octubre», _
«Noviembre», _
«Diciembre», _
«»}

‘ obtener la información cultural actual del sistema
‘ a partir de la hebra de ejecución en curso
Dim oCultureInfo = New CultureInfo(Thread.CurrentThread.CurrentCulture.LCID)

‘ asignar la nueva configuración de formato de fecha-hora
‘ al objeto que contiene la información cultural,
‘ estableciendo dicha configuración sobre la hebra
‘ principal de ejecución
oCultureInfo.DateTimeFormat = oDateTimeFormatInfo
Thread.CurrentThread.CurrentCulture = oCultureInfo

‘ mostrar la fecha formateada con el patrón de fecha completa
MessageBox.Show(dtFecha.ToString(«F»))


Y esto sería todo, espero que os resulte de ayuda. 8-D


Un saludo

1 Comentario

  1. anonymous

    que porqueria

Responder a Cancelar respuesta

Tema creado por Anders Norén