2009-02-01 14 views
16

Wie kann ich ein Datum als dd/mm/yyyy oder mm/dd/yy formatieren?Format Datum in C#

Wie in VB format("dd/mm/yy",now)

Wie kann ich dies in C#?

Antwort

44

Es ist fast das gleiche, verwenden Sie einfach die DateTime.ToString() Methode, zB:

DateTime.Now.ToString("dd/MM/yy"); 

Oder:

DateTime dt = GetDate(); // GetDate() returns some date 
dt.ToString("dd/MM/yy"); 

Außerdem könnten Sie mit einem der vordefinierten Datums-/Uhrzeitformate berücksichtigen wollen , zB:

DateTime.Now.ToString("g"); 
// returns "02/01/2009 9:07 PM" for en-US 
// or "01.02.2009 21:07" for de-CH 

Diese stellen sicher, dass das Format korrekt ist, unabhängig von der aktuelle Gebietsschemaeinstellungen.

Überprüfen Sie die folgenden MSDN-Seiten für weitere Informationen


Einige weitere relevante Informationen:

Wenn Sie ein Datum in einer bestimmten locale/Kultur angezeigt werden sollen, dann gibt es eine Überlastung der ToString() Methode, die ein IFormatProvider nimmt:

DateTime dt = GetDate(); 
dt.ToString("g", new CultureInfo("en-US")); // returns "5/26/2009 10:39 PM" 
dt.ToString("g", new CultureInfo("de-CH")); // returns "26.05.2009 22:39" 

oder alternativ Sie die CultureInfo des aktuellen Threads festlegen vor ein Datum zu Formatierung:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
dt.ToString("g"); // returns "5/26/2009 10:39 PM" 

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-CH"); 
dt.ToString("g"); // returns "26.05.2009 22:39" 
+2

Sollte Großbuchstaben mM sein umwandeln kann, mm bedeutet Minuten ... –

+2

I ermutigen Sie folgen Martins Rat und gehen mit den vordefinierten Codes, die kulturbewusst sind. Vielleicht brauchen Sie es jetzt nicht, aber in Zukunft könnte es die Dinge erleichtern. –

+0

+1 für die vordefinierten Formate –

8
string.Format("{0:dd/MM/yyyy}", DateTime.Now) 

Look "Formatstrings" auf MSDN, um alle Formatierungsoptionen zu sehen.

Verwenden yy, yyyy, M, MM, MMM, MMMM, d, dd, ddd, dddd für das Datum Komponente

Verwendung h, hh, H, HH, m, mm, s, ss für die Uhrzeitkomponente

+0

Hier ist der MSDN Link. Könnte anderen helfen. https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx – Sai

2

Versuchen Sie dies:

String.Format("{0:MM/dd/yyyy}", DateTime.Now); // 01/31/2009 
String.Format("{0:dd/MM/yyyy}", DateTime.Now); // 31/01/2009 
String.Format("{dd/MM/yyyy}", DateTime.Now); // 31/01/2009 
+0

Dieses Beispiel ruft wiederum Date.ToString (string format) auf, wie unten in Martins Antwort gezeigt. Das ist ein einfacherer, direkterer Weg als String.Format. – abelenky

+0

ja, du hast recht, Martins Antwort ist die direkte, danke. – Canavar

2

In Sie können auch

DateTime aDate = new DateTime(); 
string s = aDate.ToShortDateString(); 

für eine kurze Notation

oder

DateTime aDate = new DateTime(); 
string s = aDate.ToLongDateString(); 

für eine lange Schreibweise wie "Sunday, Feb. 1, 2009" schreiben.

Oder werfen Sie einen Blick auf MSDN für die Möglichkeiten von .ToString ("???");

2

noch besser, verwenden Sie einfach

DateTime.Now.ToString() 

oder

DateTime.Now.ToString(CultureInfo.CurrentCulture) 

das Format zu verwenden, der Benutzer bevorzugt.

0

Ich stieß auf das gleiche Problem. Was ich tun musste, war einen Verweis an der Spitze der Klasse hinzufügen und ändern Sie die CultureInfo des Thread, der gerade ausgeführt wird.

using System.Threading; 

string cultureName = "fr-CA"; 
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName); 

DateTime theDate = new DateTime(2015, 11, 06); 
theDate.ToString("g"); 
Console.WriteLine(theDate); 

Alles, was Sie tun müssen, ist die Kultur Namen zu ändern, zum Beispiel: "en-US" = United States "fr-FR" = Französisch-sprachigen Frankreich "fr-CA" = French- sprechen Kanada etc ...

0

ich denke, das einfach ist, wie Sie zu und von jedem beliebigen Format ohne Verwirrung

für Monat
DateTime.ParseExact(txt.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture).ToString("yyyy/MM/dd"));