2008-08-03 12 views
14

¿Cuál es la mejor manera de localizar un descriptor de formato de fecha?Descriptores de formato de fecha de localización

Como sabe cualquier persona de una cultura que no utiliza el formato mm/dd/aaaa, es molesto tener que ingresar las fechas en este formato. El .NET Framework proporciona una muy buena compatibilidad de localización, por lo que es trivial analizar las fechas de acuerdo con la cultura de los usuarios, pero a menudo también desea mostrar una pista útil sobre el formato requerido (especialmente para distinguir entre yy y aaaa que es intercambiable en la mayoría de las culturas).

¿Cuál es la mejor manera de hacer esto de una manera que tenga sentido para la mayoría de los usuarios (por ejemplo, dd/M/yyy es confuso debido al cambio de mayúscula y al cambio de una o dos letras).

Respuesta

2

Aquí está mi método actual. ¿Alguna sugerencia?

Regex singleMToDoubleRegex = new Regex("(?<!m)m(?!m)"); 
Regex singleDToDoubleRegex = new Regex("(?<!d)d(?!d)"); 
CultureInfo currentCulture = CultureInfo.CurrentUICulture; 

// If the culture is netural there is no date pattern to use, so use the default. 
if (currentCulture.IsNeutralCulture) 
{ 
    currentCulture = CultureInfo.InvariantCulture; 
} 

// Massage the format into a more general user friendly form. 
string shortDatePattern = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern.ToLower(); 
shortDatePattern = singleMToDoubleRegex.Replace(shortDatePattern, "mm"); 
shortDatePattern = singleDToDoubleRegex.Replace(shortDatePattern, "dd"); 
1

Cómo sobre dar el formato (dd/mm/aaaa o dd/mm/aaaa), seguido de una copia impresa de la fecha de hoy en la cultura del usuario. MSDN tiene un artículo en formatting a DateTime for the person's culture, utilizando el objeto CultureInfo que podría ser útil para hacerlo. Una combinación del formato (con el que la mayoría de la gente está familiarizada) combinada con la fecha actual representada en ese formato debería ser una pista suficiente de la persona sobre cómo deben ingresar la fecha. (También incluya un control de calendario para aquellos que todavía no pueden descifrarlo).

6

Just use ISO-8601. Es un estándar internacional.

Date and time (current at page generation) expressed according to ISO 8601: 
Date:       2014-07-05 
Combined date and time in UTC: 2014-07-05T04:00:25+00:00 
           2014-07-05T04:00:25Z 
Week:       2014-W27 
Date with week number:   2014-W27-6 
Ordinal date:     2014-186 
1

El problema con los estándares internacionales es que casi nadie los usa. Intento donde puedo, pero estoy obligado a usar dd/mm/aaaa en casi todos lados en la vida real, lo que significa que estoy tan acostumbrado que siempre es un proceso consciente usar ISO-8601. Para la mayoría de las personas que ni siquiera intentan usar ISO-8601 es aún peor. Si puedes internacionalizar donde puedas, creo que es una gran ventaja.

4

Tengo que estar de acuerdo con las fechas 'incorrectas' de OP realmente jar con mi crianza DD/MM/YYYY y encuentro que las fechas y tiempos de ISO 8601 son extremadamente fáciles de trabajar. Por una vez, el estándar lo hizo bien y engtech tiene la respuesta obvia que no requiere localización.

Iba a reportar el formulario de entrada de cumpleaños en el desbordamiento de la pila como un error debido a la cantidad de pulgar que es para la mayoría del mundo.

1

Una forma abreviada es conveniente y ayuda a evitar errores ortográficos. Localice según corresponda, pero asegúrese de mostrar el formato esperado (no deje al usuario a ciegas). Proporcione un control de selector de fecha como opcional ayuda para completar el campo.

Como extra, el análisis en tiempo real y la visualización de la fecha en forma larga también pueden ser útiles.

0

Mejor opción: En cambio, yo recomendaría utilizar un selector de fecha estándar.

Alternativa: (¿en un control separado) cada vez que el contenido de los cambios de control de edición, analizar y mostrar el formato largo del día (es decir: de entrada "03/04/09" pantalla "Su aportación : 4 de marzo de 2009 ")