Ich arbeite an einer App, die in vielen Ländern der Welt gesehen werden kann. Es gibt nicht viele Länder, die Stunden, Minuten und Sekunden mit etwas anderem als: als Trennzeichen zeigen, aber es gibt ein paar und ich möchte sicherstellen, dass die Zeiten für ihre Region korrekt formatiert sind. DateTime ist großartig, aber TimeSpan ist es nicht. Diese Snippets stammen aus meinem unmittelbaren Fenster in Visual Studio 2010 mit .Net 4 mit meiner Region in Malayalam (Indien). Der Aufruf von dateTime.Now gibt außerdem an, wie die Uhrzeit auf meiner Uhr, in Microsoft Outlook und anderen Bereichen angezeigt wird. Formatieren TimeSpan in verschiedenen Kulturen
DateTime.Now.ToString()
"02-10-12 17.00.58"
http://msdn.microsoft.com/en-us/library/dd784379.aspx sagt: „Wenn format null ist, das Datetime Objekt, das mit der aktuellen Kultur zugeordnet ist, wird verwendet. Wenn Format ein benutzerdefinierten Format-String ist, der format Parameter ignoriert.“ Es liegt nahe, dass ich die Current CultureInfo nicht einmal weitergeben muss. Das Format, das ich hier möchte, ist hh.mm.ss, aber natürlich hh: mm: ss in den meisten anderen Sprachen, und wenn es andere Möglichkeiten gibt, sollte es automatisch auch diese reflektieren - im Grunde sollte TimeSpan kulturbewusst sein wie DateTime ist.
jedoch:
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"
Ich bin für eine einfache, einzelne Leitung zur Ausgabe einer Zeitspanne in einer Kultur-Aware Weise suchen. Irgendwelche Ideen werden geschätzt.
Aber eine viel einfachere Problemumgehung, wenn Sie eine Formatzeichenfolge verwenden, ist 'ts.ToString (" h '.' Mm '.' Ss ")'.Funktioniert seit .NET 4.0. Dies codiert die Zeit natürlich. Wenn Sie das Zeittrennzeichen der Kultur verwenden möchten, lesen Sie es aus 'CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator', setzen Sie es in Apostrophe und verwenden Sie es zusammen mit' h', 'mm' und' ss' in einer Formatzeichenfolge für die 'Zeitspanne'. –
Schwer zu sehen, wie das "einfacher" ist. Es ist sicherlich nicht korrekt mit solchen Code ignoriert das Zeitformat überschreibt, dass der Benutzer in der Systemsteuerung angegeben. –