Estoy trabajando en una aplicación que se puede ver en muchos países del mundo. No hay muchos países que muestren horas, minutos y segundos con algo más que: como un separador, pero hay algunos y quiero asegurarme de que las horas estén formateadas correctamente para su región. DateTime es genial en esto pero TimeSpan no lo es. Estos fragmentos son de mi ventana inmediata en Visual Studio 2010 usando .Net 4 con mi región establecida en Malayalam (India). La llamada dateTime.Now también refleja cómo se muestra el tiempo en mi reloj, Microsoft Outlook y otras áreas.Formateo de TimeSpan en diferentes culturas
DateTime.Now.ToString()
"02-10-12 17.00.58"
http://msdn.microsoft.com/en-us/library/dd784379.aspx dice: "Si formatProvider es nulo, se utiliza el objeto DateTimeFormatInfo que se asocia con la cultura actual. Si el formato es una cadena de formato personalizado, el parámetro formatProvider se ignora." Es lógico que no necesite ni siquiera pasar el CultureInfo actual. El formato que quiero aquí es hh.mm.ss pero obvioulsy hh: mm: ss cuando en la mayoría de los otros idiomas, y si hay otras posibilidades, también debería reflejarlas automáticamente: básicamente TimeSpan debería ser culturalmente consciente, solo como DateTime es.
Sin embargo:
timeRemaining.ToString()
"00:02:09"
timeRemaining.ToString("c")
"00:02:09"
timeRemaining.ToString("c", CultureInfo.CurrentCulture)
"00:02:09"
timeRemaining.ToString("g")
"0:02:09"
timeRemaining.ToString("G")
"0:00:02:09.0000000"
timeRemaining.ToString("t")
"00:02:09"
timeRemaining.ToString("g", CultureInfo.CurrentCulture)
"0:02:09"
timeRemaining.ToString("g", CultureInfo.CurrentUICulture)
"0:02:09"
timeRemaining.ToString("G", CultureInfo.CurrentUICulture)
"0:00:02:09.0000000"
timeRemaining.ToString("G", CultureInfo.CurrentCulture)
"0:00:02:09.0000000"
timeRemaining.ToString("t", CultureInfo.CurrentCulture)
"00:02:09"
Busco una simple línea, solo a la salida de un lapso de tiempo de una manera cultura-Aware. Cualquier idea es apreciada.
Pero una solución mucho más simple si va a utilizar una cadena de formato es 'ts.ToString (" h '.' Mm '.' Ss ")'.Funciona desde .NET 4.0. Esto codifica el período del curso. Si desea utilizar el separador de tiempo de la cultura, léelo de 'CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator', colóquelo dentro de los apóstrofos y úselo junto con' h', 'mm' y' ss' en una cadena de formato para el 'TimeSpan'. –
Es difícil ver cómo eso es "más simple". Ciertamente no será preciso con dicho código ignorando el formato de tiempo que el usuario especificó en el Panel de control. –