Wie kann ich ein Nullable DateTime mit ToString () formatieren?
Wie kann ich umwandeln die nullable DateTime dt2 zu einem formatierten string?
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-dd hh:mm:ss")); //works
DateTime? dt2 = DateTime.Now;
Console.WriteLine(dt2.ToString("yyyy-MM-dd hh:mm:ss")); //gives following error:
keine überladung der Methode ToString nimmt
ein argument
Kommentar zu dem Problem - Öffnen
Hallo, hätten Sie etwas dagegen, der überprüfung der angenommenen und aktuelle Antworten? Eine weitere relevante zu-Tag-Antwort könnte sein, mehr richtige.
InformationsquelleAutor der Frage Edward Tanguay | 2009-12-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: Wie bereits in anderen Kommentaren, überprüfen Sie, dass es eine nicht-null-Wert.
Update: wie empfohlen in die Kommentare, extension-Methode:
Ab C# 6, die Sie verwenden können, die null-conditional operator zur Vereinfachung des Codes noch mehr. Der Ausdruck unter null zurückgibt, wenn die
DateTime?
null ist.InformationsquelleAutor der Antwort Blake Pettersson
Versuchen Sie, diese für Größe:
Des aktuellen dateTime-Objekts, den Sie suchen, zu formatieren, ist in der dt.Value-Eigenschaft und nicht auf die dt2-Objekt selbst.
InformationsquelleAutor der Antwort Russ
Als andere haben erklärt, Sie auf null prüfen muss vor dem Aufruf von ToString aber zu vermeiden, wiederholen Sie konnte erstellen eine Erweiterung Methode, die das tut, so etwas wie:
Kann aufgerufen werden wie:
InformationsquelleAutor der Antwort David Glenn
Euch über engineering, das alle und machen es viel komplizierter als es wirklich ist. Wichtige Sache, halt mit ToString und beginnen Sie mit der Formatierung von Zeichenfolgen wie string.Format oder Methoden, die Unterstützung der string-Formatierung wie Konsole.WriteLine. Hier ist die bevorzugte Lösung für diese Frage. Dies ist auch die sicherste.
Ausgabe: (ich habe Anführungszeichen, so dass Sie sehen können, es kommt zurück als eine leere Zeichenkette, wenn null)
InformationsquelleAutor der Antwort John C
C# 6.0 baby:
dt2?.ToString("dd/MM/yyyy");
InformationsquelleAutor der Antwort iuliu.net
Das problem mit der Formulierung einer Antwort auf diese Frage ist, dass Sie nicht geben Sie den gewünschten Ausgang, wenn die nullable datetime keinen Wert hat. Der folgende code wird die Ausgabe
DateTime.MinValue
in einem solchen Fall, und im Gegensatz zu den derzeit akzeptierten Antworten, wird nicht werfen eine Ausnahme.InformationsquelleAutor der Antwort Matt Howells
Sehen, dass Sie wirklich wollen, zu bieten, das format würde ich vorschlagen, fügen Sie die IFormattable-Schnittstelle zu Kleine extension-Methode, wie so, so dass Sie nicht haben, die scheußliche format-string-Verkettung.
InformationsquelleAutor der Antwort ElmarG
Können Sie
dt2.Value.ToString("format")
, aber natürlich erfordert, dass die dt2 != null, und das negiert th Verwendung von nullable-Typ in den ersten Platz.Gibt es mehrere Lösungen hier, aber die große Frage ist: Wie wollen Sie das format ein
null
Datum?InformationsquelleAutor der Antwort Henk Holterman
Hier einen allgemeineren Ansatz. Dies ermöglicht es Ihnen, string format nullable-Wert-Typ. Ich habe die zweite Methode zu erlauben, das überschreiben der Standard string-Wert anstelle der Verwendung der Standard-Wert für den Wert geben.
InformationsquelleAutor der Antwort Schmalls
Was über etwas so einfach wie diese:
InformationsquelleAutor der Antwort Max Brown
Ich denke, Sie müssen verwenden Sie die GetValueOrDefault-Methode. Das Verhalten mit ToString("yy...") ist nicht definiert, wenn die Instanz null ist.
InformationsquelleAutor der Antwort martin
Kürzeste Antwort
Tests
InformationsquelleAutor der Antwort drobertson
IFormattable enthält auch einen format provider, die verwendet werden können, ermöglicht sowohl format, IFormatProvider zu null in dotnet 4.0 das wäre
Verwendung zusammen mit benannten Parametern können Sie tun:
dt2.ToString(Standardwert: "n/a");
In älteren Versionen von dotnet-Sie bekommen eine Menge von überlastungen
InformationsquelleAutor der Antwort JeroenH
Ich mag diese option:
InformationsquelleAutor der Antwort Martin
Einfache generische Erweiterungen
InformationsquelleAutor der Antwort Andzej Maciusovic
Hier ist Blake ' s ausgezeichnete Antwort als eine Erweiterung-Methode. Fügen Sie diese zu Ihrem Projekt und die Aufrufe in der Frage, funktionieren wie erwartet. Wie es verwendet wird, wie
MyNullableDateTime.ToString("dd/MM/yyyy")
, mit dem gleichen Ausgang wieMyDateTime.ToString("dd/MM/yyyy")
, außer das der Wert"N/A"
wenn die DateTime null ist.InformationsquelleAutor der Antwort Sinjai
Sogar eine bessere Lösung in C# 6.0:
InformationsquelleAutor der Antwort Mohammed Noureldin
RAZOR-syntax:
InformationsquelleAutor der Antwort Tigerhajen
Vielleicht ist es eine späte Antwort aber vielleicht hilft jemand anderes.
Einfach ist:
oder benutzen Sie einfach ein beliebiges format anstatt "d".
Besten
InformationsquelleAutor der Antwort Waleed
können Sie einfache Linie:
InformationsquelleAutor der Antwort Daniel Heo