Inicio - Articulos - Descargas de Código Fuente - VituZone - Anuncia Aquí - Contáctame - Suscríbete
¿Prefieres buscar los artículos por temas? Encuéntralos aquí
.Net Framework 2.0 (5)
ASP.net 2.0 (4)
Otras herramientas (1)
Windows Mobile (1)

Califica este artículo:




Estás en la categoría: ASP.net 2.0
Puedes visitar artículos similares en: ASP.net 2.0

Formateo de fechas, números y moneda en asp.net usando culturas (Globalization)

Breve descripción: Aquí se presenta una forma muy simple de utilizar culturas para dar formato a fechas, números y monedas.
Autor: Víctor Hurtado Díaz
Fecha publicación: 02/04/2008
Cantidad Visitas al artículo: 19106
Calificación del artículo: Buena Ver Calificaciones dadas a este artículo



El .net framework introduce el concepto de culturas en donde cada cultura tiene intrínsecamente relacionados los formatos de fechas, números y monedas así como también el tipo de calendario que utilizan según a la región a la que pertenezcan.
Por ejemplo, en mi caso yo quiero utilizar la cultura de Perú (el nombre de dicha cultura es “es-PE”), ésta cultura define en si misma los siguientes formatos:
Fechas: dd/mm/yyyy hh:mm:ss (el “/” como separador de fechas)
Moneda: S/. 999.99 (símbolo de Nuevos Soles S/. y 2 decimales)
Números: 99.99 (el “.” Como separador decimal y 2 números decimales)

Esto mismo sucede con todas las culturas, cada una relacionada a una región en especial del mundo.
Si quieres obtener el listado total de culturas puedes ingresar a Listado completo de culturas para utilizar en asp.net, ahí se mencionan los formatos utilizados por cada una de ellas.

Nosotros también podemos cambiar la definición de una cultura en particular para hacer una cultura personalizada por ejemplo, por si necesitamos algún cambio de los formatos por defecto por exigencia de nuestra aplicación.

A continuación se muestra un ejemplo de cómo se pueden alternar entre diversas culturas dentro de nuestra aplicación con el fin de dar diversos formatos a los números y fechas, esto puede ser de mucha utilidad cuando necesitamos crear una aplicación multi-lenguaje por ejemplo “Español (ES) e Inglés (EN)”, ahí podríamos detectar el idioma del navegador y luego hacer el intercambio de culturas según corresponda.
Para nuestro ejemplo vamos a intercambiar entre las culturas de Perú, Estados Unidos y una Personalización de la cultura de Estados Unidos.

Primero muestro a continuación el html de la página de ejemplo en donde se identifican los controles que serán utilizados para mostrar los datos formateados según la cultura.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>Manejo de culturas</title>
</head>
<body>
  <form id="frmCulture" runat="server">
    Seleccione una cultura:
    <asp:DropDownList ID="ddlCulture" runat="server" AutoPostBack="True">
      <asp:ListItem Value="1" Text="Per&#250;"></asp:ListItem>
      <asp:ListItem Value="2" Text="USA"></asp:ListItem>
      <asp:ListItem Value="3" Text="Cultura personalizada"></asp:ListItem>
    </asp:DropDownList>
    <br />
    Cultura actual: <asp:Label ID="lblCultura" runat="server"></asp:Label><br />
    Fecha actual: <asp:Label ID="lblFecha" runat="server"></asp:Label><br />
    Moneda: <asp:Label ID="lblMoneda" runat="server"></asp:Label><br />
    Decimal: <asp:Label ID="lblDecimal" runat="server"></asp:Label>
  </form>
</body>
</html>

Ahora veremos el CodeBehind, la sobreescritura del método InitializeCulture(), muy útil para poder detectar la cultura antes de que la página cargue y tomar la decisión de sobre qué cultura podemos utilizar. Cabe resaltar que ese método está ya definido por la clase System.Web.UI.Page pero nosotros lo sobrescribiremos para poder cambiar la cultura antes de que la página cargue.

Luego, en el evento Page_Load de la página simplemente se recoge la cultura actual de la instancia de nuestra aplicación asp.net y da los formatos correspondientes de la fecha, de moneda con .ToString(“C”) y de números con .ToString(“N”).
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Globalization;

public partial class Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    this.lblCultura.Text = System.Threading.Thread.CurrentThread.CurrentCulture.ToString();
    this.lblFecha.Text = DateTime.Now.ToString();
    double miMoneda = 100;
    this.lblMoneda.Text = miMoneda.ToString("C");
    double miDecimal = 100.232323;
    this.lblDecimal.Text = miDecimal.ToString("N");
  }
  protected override void InitializeCulture()
  {
    string culturaSeleccionada = "es-PE";
    if (Request.Form["ddlCulture"] != null)
      culturaSeleccionada = Request.Form["ddlCulture"];
    switch (culturaSeleccionada)
    {
      case "1":
        CultureInfo culturaPeru = new CultureInfo("es-PE");
        System.Threading.Thread.CurrentThread.CurrentCulture = culturaPeru;
        break;
      case "2":
        CultureInfo culturaUSA = new CultureInfo("en-US");
        System.Threading.Thread.CurrentThread.CurrentCulture = culturaUSA;
        break;
      case "3":
        //Modificamos la cultura de USA para agregarle detalles personalizados
        CultureInfo culturaPersonal = new CultureInfo("en-US");
        culturaPersonal.DateTimeFormat.DateSeparator = "--";
        culturaPersonal.NumberFormat.CurrencyDecimalDigits = 3;
        culturaPersonal.NumberFormat.CurrencySymbol = "P:";
        culturaPersonal.NumberFormat.NumberDecimalDigits = 4;
        System.Threading.Thread.CurrentThread.CurrentCulture = culturaPersonal;
        break;
    }
    base.InitializeCulture();
  }
}
Éste es un ejemplo muy sencillo de cómo dar formato a fechas, números y monedas en asp.net utilizando culturas, incluso permitiendo seleccionarlas dentro de una página.

Pero nosotros podríamos seleccionar la cultura en la primera página que cargue de nuestra aplicación o cambiarla cuando el usuario lo solicite dentro de una aplicación multi-idioma y seguir utilizando dicha cultura hasta que el usuario abandone la aplicación, recuerda que para eso deberás cambiar la cultura actual del hilo que está manejando la instancia de tu aplicación web así:

System.Threading.Thread.CurrentThread.CurrentCulture = UnaCultura;

Si tu aplicación web es de intranet o está dirigida a un país o territorio en especial podrías establecer predeterminadamente la cultura declarativamente en el archivo web.config mediante la siguiente etiqueta:

<system.web>
  <globalization culture="es-PE"/>
</system.web>

Así te olvidarás de establecer la cultura en las páginas de manera programática si es que no es necesario, deja al .net framework que trabaje por ti ;)

Recuerde que si tiene algún comentario o necesita el desarrollo de alguna solución referente al artículo actual puede contactarme en el momento que lo necesite.

Palabras clave del artículo:

Globalization, Culture, CurrentCulture, Formato número, formato fecha, formato moneda, asp.net


vitucho.net es la página personal de Víctor Hurtado Díaz
Esta página puede ser usada sólo bajo estos Términos de uso
¿Quieres ver todas las secciones del sitio? entra al Mapa del sitio


Admin