2016-01-15 26 views
5

Ich habe eine Frage bezüglich des Symbols, das Tage von Stunden in TimeSpan.ToString Ausgabe trennt.Strange TimeSpan.ToString Ausgang

Die Standard TimeSpan Formatstrings erzeugen unterschiedliche Separators Symbole:

  • "c" erzeugt einen Punkt (" ") Zeichen
  • "g" und "G" erzeugen ein Doppelpunkt (":") Charakter

Beispiel:

// Constant format 
Console.WriteLine(TimeSpan.FromDays(42).ToString("c", CultureInfo.InvariantCulture)); 
// Output: 42.00:00:00 (period character between days and hours) 

// General short format 
Console.WriteLine(TimeSpan.FromDays(42).ToString("g", CultureInfo.InvariantCulture)); 
// Output: 42:0:00:00 (colon character between days and hours) 

// General long format 
Console.WriteLine(TimeSpan.FromDays(42).ToString("G", CultureInfo.InvariantCulture)); 
// Output: 42:00:00:00.0000000 (colon character between days and hours) 

weiß jemand, was das Protokoll ist ic dahinter?

Allerdings analysiert TimeSpan.Parse alle diese Zeichenfolge erfolgreich.

+0

Manchmal sagst du 'TimeSpan' und manchmal sagst du' DateTime', ist das versehentlich? –

+0

Wo sage ich 'DateTime' ??? – MaDev

+0

Ihre Frage wurde von Soner Gonul bearbeitet –

Antwort

6

Diese Zeichen sind für diese Formate fest codiert.

Für "c" standard format

[-][d.]hh:mm:ss[.fffffff] 

Für "g" standard format

[-][d:]h:mm:ss[.FFFFFFF] 

Und für "G" Format Specifier

[-]d:hh:mm:ss.fffffff 

Auch doc sagt;

Im Gegensatz zu den Formatbezeichnern "g" und "G" ist der Formatbezeichner "c" nicht kultursensitiv. Erzeugt die Zeichenfolgenrepräsentation eines TimeSpan-Werts, der invariant ist und der allen vorherigen -Versionen von .NET Framework vor .NET Framework 4 gemeinsam ist. "c" ist die Standard TimeSpan Formatzeichenfolge; Die TimeSpan.ToString() -Methode formatiert einen Zeitintervallwert, indem die Formatzeichenfolge "C" verwendet.

Auch in Custom TimeSpan Format Strings

Das .NET Framework keine Grammatik für Separatoren in der Zeit Intervalle definieren. Dies bedeutet, dass die Trennzeichen zwischen Tagen und Stunden, Stunden und Minuten, Minuten und Sekunden sowie Sekunden und Brüche eines Sekunden müssen alle als Zeichenliteralen in einem Formatzeichenfolge behandelt werden.

Klingt wie der wichtigste Grund Konsistenz ist zwischen allen .NET Framework-Versionen.Vielleicht ist das, warum sie dieses Format als Konstante nennen :)

+0

Danke für die Antwort! – MaDev

+0

@Madev Gut zu helfen. –

0

Blick auf die MSDN

Das „g“ Timespan Formatspezifizierer die Stringdarstellung einer Zeitspanne Wert in kompakter Form liefert nur, indem die Elemente, die sind notwendig.

[-] [d:] h: mm: ss [.FFFFFFF]

.....................

The "c" Format-Spezifizierer gibt die Zeichenfolge Darstellung eines Span-Wert in der folgenden Form:

[-] [d.] hh: mm: ss [.fffffff]

+0

Ich habe bereits die MSDN-Dokumentation gelesen. Meine Frage war, was die Logik dahinter ist ... – MaDev

2

Es gibt weitere Einzelheiten über MSDN - Standard TimeSpan Format Strings.

Im Wesentlichen:

"c" ist die Constant format: Dieser Bezeichner ist nicht kultursensibel. Format ist [d‘.‘] Hh‘:‘ mm‘:‘ ss [ ‚‘ fffffff]

"g" ist die General Short format: Diese Kultur empfindlich ist. Format ist [-] [d‘:‘] h‘:‘ mm‘:‘ ss [.FFFFFFF]

"G" ist die General Long format: Diese Kultur empfindlich ist. Format ist [-] d ':' hh ':' mm ':' ss.fffffff.

+0

Ich habe bereits die MSDN-Dokumentation gelesen. Meine Frage war, was ist die Logik dahinter ... – MaDev