Your browser does not support CSS. If images appear below, please disregard them.
Ingreso

Foro de Scientia® Soluciones Informáticas

Obviar

FAQ Registrate

Fechas Formato Americano y Español

ASP.NET, WebParts, Web Controls, User Web Controls, etc.

Fechas Formato Americano y Español

Notapor juje » Jue Ene 21, 2010 12:12 pm

Hola, necesito si me pueden dar una mano, quiero detectar cual es el formato de fecha que ingresó el usuario en un textbox antes de utilizarlo, ej.: Si el usuario pone: 1/25/2010, tengo que llevarlo a 25/1/2010, y si pone 25/1/2010, dejarlo como esta, me pueden ayudar?

Gracias
Si buscas resultados distintos, no hagas siempre lo mismo, no podemos resolver problemas pensando de la misma manera que cuando los creamos.
Avatarde Usuario
juje
 
Posts: 7
Registrado: Lun Ago 03, 2009 5:02 pm

Re: Fechas Formato Americano y Español

Notapor Dario » Vie Ene 22, 2010 5:49 pm

Hola juje,

Si la necesidad es que puedas pasar el formato de la fecha podés utilizar el siguiente código:

string Fecha = "2010-02-25";
DateTime FechaConvertida;

if (DateTime.TryParse(Fecha, new CultureInfo("es-AR"), DateTimeStyles.None, out FechaConvertida))
Fecha = FechaConvertida.ToString("dd/MM/yyyy");
else
{
if (DateTime.TryParse(Fecha, new CultureInfo("en-US"), DateTimeStyles.None, out FechaConvertida))
Fecha = FechaConvertida.ToString("dd/MM/yyyy");
else
throw new FormatException(string.Format("Unable to format date:{0}", Fecha));
}

Fijate que funciona aunque el formato de la fecha no sea exactamente dd/MM/yyyy, por ejemplo tambien funciona con dd-MM-yyyy o yyyy-MM-dd, Si necesitás que el formato sea exacto podés utilizar este código:

string Fecha = "2010-02-25";
DateTime FechaConvertida;

if (DateTime.TryParseExact(Fecha,"dd/MM/yyyy", new CultureInfo("es-AR"), DateTimeStyles.None, out FechaConvertida))
Fecha = FechaConvertida.ToString("dd/MM/yyyy");
else
{
if (DateTime.TryParseExact(Fecha,"MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None, out FechaConvertida))
Fecha = FechaConvertida.ToString("dd/MM/yyyy");
else
throw new FormatException(string.Format("Unable to format date:{0}", Fecha));
}

Donde le estás exisgindo al string de entrada que tenga el formato especifico.


De todas formas el tema de que un usuario pueda ingresar una fecha en ambos formatos, o sea español o americano indistintamente, a mi parecer puede traerte un problema grave, ya que en una fecha del tipo:

25 de enero de 2010

Es bien claro cual es el dia y el mes, por lo que podés darte cuenta sin problemas si el formato es español ("25/01/2010") o americano ("01/25/2010") .

Pero de que forma podrías distinguir si un usuario esta escribiendo en español la fecha :

1 de Febrero del 2010 ("01/02/2010")

o está escribiendo en inglés la fecha 2 de enero de 2010 ("01/02/2010").

Ya no podés distingir el dia del mes y no sabés de que manera hay que convertir el string. Si no conocés la cultura del usuario es todo un problema.

Si en cambio si conocés la cultura del usuario quizás podrías exigirle que use el formato correspondiente a su cultura utilizando un CompareValidator como en este ejemplo:

<asp:TextBox runat="server" ID="TxtBx01" ValidationGroup="VG1"></asp:TextBox>
<asp:CompareValidator runat="server" ID="RV01" Operator="DataTypeCheck" ControlToValidate="TxtBx01"
ValidationGroup="VG1" Type="Date" Text="Fecha inválida"></asp:CompareValidator>
<asp:Button runat="server" ID="Btn01" ValidationGroup="VG1" Text="Aceptar" CausesValidation="true" />

incluso podrías utilizar el control CalendarExtender de Ajax para llenar el campo más amigablemente, el tema es que en este caso la cultura del thread debería estar establecida a la del usuario.

Espero que la respuesta te haya servido
Dario
 
Posts: 1
Registrado: Jue Sep 03, 2009 12:53 pm


Volver a ASP.NET

¿Quién está conectado...?

Usuarios navegando este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron