2013-04-03 9 views
13

Ich habe ein ähnliches Problem mit FormatException geworfen wird. Mein Code ist einfach:Warum löst DateTime.Now.TimeOfDay.ToString ("HH: mm: ss.ffffff") FormatException aus?

void Orders_OnSubmit() 
{ 
    DateTime CurrentTime = DateTime.Now; 
    rtbAdd("Submitted on " + CurrentTime.Date.ToString("MM/dd/yyyy") + " at " + CurrentTime.TimeOfDay.ToString("HH:mm:ss.ffffff")); 
} 

void rtbAdd(String S) 
{ 
    DefaultDelegate del = delegate() 
    { 
     rtb.AppendText(S + "\n"); 
    }; 
    this.Invoke(del); 
} 

Was ist hier falsch? Ist das ein Threading-Problem?

+0

wo wird die Ausnahme ausgelöst? –

Antwort

16

Sie müssen nicht explizit auf die Date- und TimeOfDay-Eigenschaften der DateTime-Instanz zugreifen. Sie können Ihren Code wie folgt vereinfachen:

rtbAdd(String.Format("Submitted on {0:MM/dd/yyyy} at {0:HH:mm:ss.ffffff}", DateTime.Now)); 
+2

Ausgezeichnet. Es dauerte zwei Stunden, bis ich auf MSDN gelesen und mir die Haare ausgerissen hatte, nachdem ich ein paar Permutationen im Code getestet hatte, die mich nirgendwohin gebracht haben, und nur ein paar Minuten deiner Expertenzeit! Danke noch einmal. – user1935160

21

TimeOfDay ist TimeSpan und es hat andere formatting options als DateTime. Sie müssen auch ':' entkommen:

currentTime.TimeOfDay.ToString("hh\\:mm\\:ss\\.ffffff") 

Sie Probe versucht "HH" Format zu verwenden, die defined for DateTime ist, aber nicht für TimeSpan.

+2

@ user1935160: Sie müssen die Uhrzeit nicht von Ihrer DateTime-Instanz trennen. Verwenden Sie einfach 'CurrentTime.ToString (" HH: MM: ss.ffffff ")'. Das Gleiche gilt für den Date-Teil. –

+0

Vielen Dank für die ausführliche und hilfreiche Antwort! – user1935160