Je travaille sur une application qui peut être vu dans de nombreux pays dans le monde. Il n'y a pas beaucoup de pays qui affichent des heures, minutes et secondes avec autre chose que: en tant que séparateur mais il y en a quelques-uns et je veux m'assurer que les heures sont correctement formatées pour leur région. DateTime est génial mais TimeSpan ne l'est pas. Ces extraits proviennent de ma fenêtre immédiate dans Visual Studio 2010 en utilisant .Net 4 avec ma région définie sur Malayalam (Inde). L'appel dateTime.Now reflète également comment l'heure est affichée sur mon horloge, Microsoft Outlook et d'autres zones.Mise en forme TimeSpan dans différentes cultures
DateTime.Now.ToString()
"02-10-12 17.00.58"
http://msdn.microsoft.com/en-us/library/dd784379.aspx Says « Si formatProvider est nul, l'objet DateTimeFormatInfo qui est associé à la culture actuelle est utilisée. Si le format est une chaîne de format personnalisé, le paramètre formatProvider est ignoré. » Il va de soi que je ne devrais même pas passer dans le Current CultureInfo. Le format que je veux ici est hh.mm.ss mais hh: mm: ss quand dans la plupart des autres langues, et s'il y a d'autres possibilités, cela devrait automatiquement refléter ceux-là aussi - en gros TimeSpan devrait être culture-Aware, juste comme DateTime est.
Cependant:
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"
Je suis à la recherche d'un simple, seule ligne à la sortie d'un timeSpan d'une manière de culture-Aware. Toutes les idées sont appréciées.
Mais une solution de contournement beaucoup plus simple si vous allez utiliser une chaîne de format est 'ts.ToString (" h '.' Mm '.' Ss ")'.Fonctionne depuis .NET 4.0. Ce dur-codes la période de cours. Si vous voulez utiliser le séparateur de temps de la culture, lisez-le dans 'CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator', placez-le dans apostrophes et utilisez-le avec' h', 'mm' et' ss' dans une chaîne de format pour le 'TimeSpan'. –
Difficile de voir comment c'est "plus simple". Il ne sera certainement pas précis avec un tel code en ignorant les substitutions de format de temps que l'utilisateur spécifié dans le Panneau de configuration. –