datetimeformat c# c#-4.0 datetime globalization cultureinfo

c# - datetimeformat - Formateo de TimeSpan en diferentes culturas



datetime culture en us (3)

Parece un error, puede informarlo en connect.microsoft.com. Mientras tanto, una solución alternativa es aprovechar el formato DateTime. Me gusta esto:

using System; using System.Globalization; class Program { static void Main(string[] args) { var ci = CultureInfo.GetCultureInfo("ml-IN"); System.Threading.Thread.CurrentThread.CurrentCulture = ci; var ts = new TimeSpan(0, 2, 9); var dt = new DateTime(Math.Abs(ts.Ticks)); Console.WriteLine(dt.ToString("HH:mm:ss")); Console.ReadLine(); } }

Salida:

00.02.09

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.

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 está asociado con la cultura actual. Si el formato es una cadena de formato personalizado, el parámetro formatProvider es ignorado ". 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, debería reflejarlas automáticamente, básicamente TimeSpan debería ser culturalmente consciente, igual que 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"

Estoy buscando una línea simple y única para publicar un timeSpan de una manera culturalmente consciente. Cualquier idea es apreciada.


Esto es más como un comentario, pero necesita algo de espacio, así que lo escribo como una respuesta.

Mientras que el formato de cadena de DateTime ha estado en .NET durante mucho tiempo, el formato de TimeSpan era nuevo en .NET 4.0 (Visual Studio 2010).

Una cultura tiene un objeto DateTimeFormatInfo que usa DateTime e incluye información sobre si se debe usar dos puntos : o punto . o algo más entre horas, minutos y segundos. Ahora, TimeSpan no parece usar este objeto DateTimeFormatInfo , y no hay nada llamado "TimeSpanFormatInfo".

Aquí hay un ejemplo:

// we start from a non-read-only invariant culture Thread.CurrentThread.CurrentCulture = new CultureInfo(""); // change time separator of DateTime format info of the culture CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator = "<-->"; var dt = new DateTime(2013, 7, 8, 13, 14, 15); Console.WriteLine(dt); // writes "07/08/2013 13<-->14<-->15" var ts = new TimeSpan(13, 14, 15); Console.WriteLine(ts); // writes "13:14:15"


Estoy buscando una línea simple y única para publicar un timeSpan de una manera culturalmente consciente.

Entonces creo que es mejor que DateTime clase DateTime para hacer el formateo por ti:

string display = new DateTime(timespan.Ticks).ToLongTimeString();

Suponiendo que el timespan tenga una duración positiva entre 0 y 24 horas.