2008-09-15 22 views
5

Jemand bitte korrigieren Sie mich, wenn ich falsch liege, aber ein jyyy/MM/dd (oder andere spezifische Formate) Daten in C# Parsing sollte so einfach sein alsParsen genaue Daten in C# sollten Sie nicht zwingen, einen IFormatProvider zu erstellen

DateTime.ParseExact(theDate, "yyyy/MM/dd"); 

aber nein, C# zwingt Sie, einen IFormatProvider zu erstellen.

Gibt es einen app.config freundlichen Weg, dies zu setzen, so muss ich das nicht jedes Mal tun?

DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true)); 

Antwort

14

Das IFormatProvider-Argument kann null sein.

+0

Von der MSDN-Dokumentation: "Wenn Anbieter eine NULL-Referenz (Nothing in Visual Basic) ist, wird das CultureInfo-Objekt verwendet, das der aktuellen Kultur entspricht." –

+0

Ich weiß, ich hätte nicht implizieren dürfen, dass app.config verwendet werden muss. Du hast verstanden, was ich wollte - "analysiere einfach das Datum und belästige mich nicht mit Dingen, die mir egal sind". Vielen Dank. – AlanR

3

eine Erweiterungsmethode erstellen:

public static DateTime ParseExactDateTime(this string dateString, string formatString) { 
    return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true)); 
} 
+0

Danke wird. Ich habe das nicht wirklich gut durchgemacht. –

5

die aktuelle Anwendung Kultur Verwendung:

DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture); 

Sie die Anwendung Kultur in der app.config setzen können die Globalisierung-Tag. Ich denke.

1

Sie können den IFormatProvider auch einfach einmal erstellen und für die spätere Verwendung speichern.

1

Sie könnten auch die Convert-Klasse verwenden

Convert.ToDateTime("2008/11/25"); 
6

ParseExact eine Kultur braucht: betrachten "yyyy MMM dd". MMM wird ein lokalisierter Monatsname sein, der die aktuelle Kultur verwendet.

3

Es erfordert den Formatanbieter, um die bestimmten Datums- und Uhrzeitsymbole und Zeichenfolgen (wie die Namen der Wochentage in einer bestimmten Sprache) zu bestimmen. Sie können eine Null verwenden. In diesem Fall wird das CultureInfo-Objekt verwendet, das der aktuellen Kultur entspricht.

Wenn Sie nicht jedes Mal neu angeben müssen, erstellen Sie eine Erweiterungsmethode, die entweder null oder CultureInfo ("en-CA", true) als Formatanbieter übergibt.

0

// Konvertieren Datum MySql kompatibles Format

Datetime DatWert = Convert.ToDateTime (datetimepicker.text);

Zeichenfolge datevalue = DateValue.ToString ("yyyy-MM-dd");

0

Was ist falsch an der Verwendung von Globalization.CultureInfo.InvariantCulture?

+0

Nichts, nur nicht meinen Code wegwerfen wollen, da Globalisierung in unserem Geschäft keine Sorge ist. – AlanR