[NET] Sobre fechas y números que se dan vuelta, o que cambian el punto por la coma

Basado en un post viejuno de Octubre del 2008 que solo encuentro en el cache de Google. Y que alguien menciono en Twitter ayer.


Buenas,

cada tanto recuerdo mis primeros días en la informática allá por el 1999, cuando descubría el placer de Visual Basic 6, ASP, los componentes COM+, SQL Server, etc. En esos días, mi trabajo era 100% developer en un producto de Workflow, y recuerdo cuando con Suin y el Iteya, uno programaba las paginas ASP, otro los componentes COM+ y yo lo enganchaba al Workflow. Después de noches eternas tirando líneas y líneas (donde una coca cola con café era el alimento indispensable) muchas cosas me quedaron bastante claras, entre ellas que las fechas se deben tratar con tipos de dato DateTime y lo mismo aplica para los números.

Hoy 9 años después, a los 3 la vida nos llevó por diferentes caminos; uno es dueño de una empresa con un producto impresionante (pocas veces vi algo tan groso con WF), otro lidera un equipo de desarrollo en una empresa que no puedo nombrar (porque es muy grande) y yo … bueno yo escribo en www.elBruno.com.

Sin embargo, creo que a los 3 las siguientes frases nos ponen de muy mal humor:

– se me dio vuelta la fecha

– el número no me toma la coma, solo funciona con puntos

Me parece increíble que actualmente (año 2008 para futuras referencias) todavía existan personas que no se tomen 30 minutos para leer como funcionan las Cultures de .Net o que piensen que la mejor forma de escribir una función para validar un número es la siguiente:

private bool IsNumeric(string text) { return System.Text.RegularExpressions.Regex.IsMatch(text, @”^d+(.d+)?$”); }

Como sé que es una misión imposible, y que la gente seguirá por el mal camino; para todos aquellos que seguirán tratando a las fechas y a los números con strings, tengo 3 consejos:

1. En primer lugar informar/taladrar/advertir/notificar que la coma no es el único carácter para separar decimales, y que en algunos países, por cuestiones muy extrañas, la fecha puede tener un formato del tipo: mes/día/año (esto no se debe a cuestiones místicas relacionadas con la posición de los planetas, ni tampoco la solución consiste en degollar un gallo virgen y derramar su sangre un martes 13 sobre un ordenador amarillo; las cosas simplemente son así)

2. Por favor, no complicarse la vida con funciones extrañas para averiguar cuál es el carácter para separar decimales.

A esa excelente idea que consiste en dividir un número por dos, guardarlo en un string y buscar el 2do carácter; se la puede reemplazar por el uso de la biblioteca NumberFormat y averiguar muchas cosas más con menos. Por ejemplo para averiguar el separador de decimales, o el signo para los número negativos es posible utilizar el siguiente código:

NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat; string decimalSeparator = numberFormatInfo.NumberDecimalSeparator; string groupSeparator = numberFormatInfo.NumberGroupSeparator; string negativeSign = numberFormatInfo.NegativeSign;

3. Finalmente, si alguna vez nos cruzamos en un proyecto y tienes alguna “excusa” para utilizar strings, por favor dímelo. Después de 9 años, sigo escuchando las cosas más inverosímiles que me sorprenden y me alegran el día.

 

Saludos @ Home

El Bruno

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s