2010-06-20 8 views
6

Ich möchte die Stunden von der Datetime erhalten. Also, wenn es 01.00 Uhr ist, wird es nur 1 sein, wenn es 22.00 Uhr ist es 10 sein wird, ohne führende Null, so Stunden Ort, um 1-9Format Exception- DateTime und Stunden

So habe ich versucht, diese

DateTime test= DateTime.Now; 
Console.WriteLine(test.ToString("h")); 

ich zu tun bekommen dies

System.FormatException wurde nicht behandelt
Message = Eingabezeichenfolge nicht in ein richtigen Format war. Source = mscorlib
Stacktrace: bei System.DateTimeFormat.GetRealFormat (String Format, Datetime dtfi) bei System.DateTimeFormat.ExpandPredefinedFormat (String Format, Datumzeit & Datums- und Uhrzeit, Datetime & dtfi, Span & offset) bei System.DateTimeFormat.Format (Datetime Datums- und Uhrzeit, String-Format, Datetime dtfi, Span Offset) bei System.DateTimeFormat.Format (Datetime Datums- und Uhrzeit, String-Format, DateTimeFor MatInfo dtfi) bei System.DateTime.ToString (String Format) bei ConsoleApplication1.Program.Main (String [] args ) in C: \ Benutzer \ chobo2 \ Dokumente \ Visual Studio 2010 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs: Linie 21 bei System.AppDomain._nExecuteAssembly (RuntimeAssembly Montage, String [] args) bei System.AppDomain.ExecuteAssembly (String assembly, Evidence assemblySecurity, String [] args) bei Microsoft .VisualStudio.HostingProcess.HostProc.RunUsersAssembly() bei System.Threading.ThreadHelper.Three adStart_Context (Object Zustand) bei System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, Context Rückruf, Objektzustand, Boolean ignoreSyncCtx) bei System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, Context Rückruf, Object Zustand) bei System.Threading.ThreadHelper.ThreadStart() Innerexception:

Antwort

13

Von MSDN (das "h" benutzerdefinierte Formatbezeichner):

Wenn der Formatbezeichner "h" ohne andere benutzerdefinierte Formatbezeichner verwendet wird, wird er als Standardformat für Datum und Uhrzeit interpretiert und löst eine FormatException aus. Weitere Informationen zur Verwendung eines einzelnen Formatbezeichners finden Sie unter Verwenden einzelner benutzerdefinierter Formatbezeichner weiter unten in diesem Thema.

Sie können die folgenden (as described in „Verwenden von einzelnem individuellen Formatbezeichner)“:

Um eine des benutzerdefinierten Datums- und Uhrzeitformat Bezeich als einzigen Spezifizierer in einem Format-String verwenden (das ist, die "d", "f", "F", "g", "h", "H", "K", "m", "M", "s", "t", zu verwenden y "," z ",": "oder"/"benutzerdefinierter Formatbezeichner selbst, ein Leerzeichen vor oder hinter dem Spezifizierer oder einen Prozent- ("% ") Formatbezeichner vor dem einzelnen benutzerdefinierten Datums- und Uhrzeitspezifizierer .

So können Sie folgendes tun:

DateTime test= DateTime.Now; 
Console.WriteLine(test.ToString("{0:%h}")); // From the document, adds precision 
Console.WriteLine(test.ToString("%h")); // Will also work 
+0

Ya ich etwas über% h gefunden, aber nicht verstehen, warum man es brauchte. http://msdn.microsoft.com/en-us/library/system.datetime.hour.aspx – chobo2

+0

+1. Obwohl sollte es nicht 'Console.WriteLine (test.ToString ("% h "));'? –

+0

@David Neale - beide würden funktionieren. Das '0:' ist ein Präzisionsspezifizierer, nur für den Fall. – Oded