.net - tutorial - Descriptores de formato de fecha de localización
para que se usa elastic search (7)
¿Cuál es la mejor manera de localizar un descriptor de formato de fecha?
Como sabe cualquier persona de una cultura que no utiliza el formato mm / dd / aaaa, es molesto tener que ingresar 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 en el caso y al cambio de una a dos letras).
¿Qué le parece dar el formato (mm / dd / 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 sobre cómo formatear un DateTime para la cultura de la persona , 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).
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");
El problema con los estándares internacionales es que prácticamente 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.
Una forma corta 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 asistente opcional para completar el campo.
Como un análisis extra, sobre la marcha y la visualización de la fecha en forma larga también podría ser útil.
La mejor opción : en cambio, recomendaría usar un selector de fecha estándar.
Alternativa : cada vez que cambia el contenido del control de edición, analízalo y muestra (en un control separado?) El formato largo de la fecha (es decir, la entrada "03/04/09" muestra "Tu entrada: 4 de marzo de 2009" )
Solo 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
Tengo que estar de acuerdo con las fechas "incorrectas" de OP 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 pila como un error debido a la cantidad de pulgar que es para la mayoría del mundo.