Ich habe mit der Datetime.ParseExact-Methode herumgespielt und sie möchte einen IFormatProvider ...
Es funktioniert mit der Eingabe von Null, aber was genau macht es?
c#
asp.net
iformatprovider
Moulde
quelle
quelle
Antworten:
Zusätzlich zu Ian Boyds Antwort:
Auch
CultureInfo
implementiert diese Schnittstelle und kann in Ihrem Fall verwendet werden. So können Sie beispielsweise eine französische Datumszeichenfolge analysieren. Du könntest benutzenquelle
DateTime.ParseExact(string, string, IFormatProvider)
stattdessen verwenden, ich glaube - als solches:DateTime.ParseExact("20160409 111559","yyyyMMdd HHmmss",CultureInfo.CurrentCulture)
DateTime dt = DateTime.Parse(yourDateInputString, ci);
Bitte überarbeiten Sie Ihre Antwort.Die
IFormatProvider
Schnittstelle wird normalerweise von einerCultureInfo
Klasse für Sie implementiert , z.CultureInfo.CurrentCulture
CultureInfo.CurrentUICulture
CultureInfo.InvariantCulture
CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)
Die Schnittstelle ist ein Gateway für eine Funktion zum Abrufen eines Satzes kulturspezifischer Daten aus einer Kultur. Die zwei allgemein verfügbaren Kulturobjekte,
IFormatProvider
nach denen abgefragt werden kann, sind:DateTimeFormatInfo
NumberFormatInfo
Normalerweise funktioniert es so, dass Sie den bitten
IFormatProvider
, Ihnen einDateTimeFormatInfo
Objekt zu geben :Es gibt auch Insiderwissen, dass jede
IFormatProvider
Schnittstelle wahrscheinlich von einer Klasse implementiert wird, die vonCultureInfo
oder absteigtDateTimeFormatInfo
, sodass Sie die Schnittstelle direkt umwandeln können:Aber tu das nicht
All diese harte Arbeit wurde bereits für Sie geschrieben:
So erhalten Sie eine
DateTimeFormatInfo
vonIFormatProvider
:So erhalten Sie eine
NumberFormatInfo
vonIFormatProvider
:Der Wert von
IFormatProvider
ist, dass Sie Ihre eigenen Kulturobjekte erstellen. Solange sieIFormatProvider
Objekte implementieren und zurückgeben, nach denen sie gefragt werden, können Sie die integrierten Kulturen umgehen.Sie können auch
IFormatProvider
beliebige Kulturobjekte weiterleiten - durch dieIFormatProvider
. ZB der Name Gottes in verschiedenen KulturenAuf diese Weise kann Ihre benutzerdefinierte
LordsNameFormatInfo
Klasse in einem mitfahrenIFormatProvider
, und Sie können die Redewendung beibehalten.In Wirklichkeit müssen Sie niemals die
GetFormat
Methode IhrerIFormatProvider
selbst aufrufen .Wann immer Sie eine benötigen
IFormatProvider
, können Sie einCultureInfo
Objekt übergeben:quelle
Das Übergeben von null als
IFormatProvider
ist nicht der richtige Weg, dies zu tun. Wenn der Benutzer ein benutzerdefiniertes Datums- / Uhrzeitformat auf seinem PC hat, treten Probleme beim Parsen und Konvertieren in Zeichenfolgen auf. Ich habe gerade einen Fehler behoben, bei dem jemand beim Konvertieren in einen String null als IFormatProvider übergeben hatte.Stattdessen sollten Sie verwenden
CultureInfo.InvariantCulture
Falsch:
Richtig:
quelle
CultureInfo.InvariantCulture
anstelle von verwenden solltenCultureInfo.CurrentCulture
?null
wird standardmäßig übergebenCultureInfo.CurrentCulture
. Siehe den Aufruf in der Referenzquelle . Wenn Sie der Aufrufkette folgen, wird die Null schließlich durchDateTimeFormatInfo.CurrentInfo
die ersetzt, die denCultureInfo.CurrentCulture
Ausgaben entspricht.IFormatProvider bietet Kulturinformationen zu der betreffenden Methode. DateTimeFormatInfo implementiert IFormatProvider und ermöglicht es Ihnen, das Format anzugeben, in dem Datum und Uhrzeit angezeigt werden sollen. Beispiele finden Sie auf den entsprechenden MSDN-Seiten.
quelle
Sie können hier http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx sehen
Siehe dort die Anmerkungen und das Beispiel.
quelle
IFormatProvider
nicht verwendetIFormatProvider
.Überprüfen Sie http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx auf die API.
quelle
Von MSDN
Das .NET Framework enthält die folgenden drei vordefinierten IFormatProvider-Implementierungen, um kulturspezifische Informationen bereitzustellen, die beim Formatieren oder Parsen von numerischen Werten sowie Datums- und Zeitwerten verwendet werden:
NumberFormatInfo
Klasse, die Informationen bereitstellt, die zum Formatieren von Zahlen verwendet werden, z. B. die Symbole für Währung, Tausendertrennzeichen und Dezimaltrennzeichen für eine bestimmte Kultur. Informationen zu den vordefinierten Formatzeichenfolgen, die von einemNumberFormatInfo
Objekt erkannt und in numerischen Formatierungsvorgängen verwendet werden, finden Sie unter Standardzeichenfolgen für numerische Formate und Zeichenfolgen für benutzerdefinierte numerische Formate .DateTimeFormatInfo
Klasse, die Informationen bereitstellt, die zum Formatieren von Datum und Uhrzeit verwendet werden, z. B. die Datums- und Zeittrennzeichen für eine bestimmte Kultur oder die Reihenfolge und das Format der Jahres-, Monats- und Tageskomponenten eines Datums. Informationen zu den vordefinierten Formatzeichenfolgen, die von einemDateTimeFormatInfo
Objekt erkannt und in numerischen Formatierungsvorgängen verwendet werden, finden Sie unter Standard-Formatzeichenfolgen für Datum und Uhrzeit sowie Benutzerdefinierte Zeichenfolgen für Datums- und Zeitformat.CultureInfo
Klasse, die eine bestimmte Kultur repräsentiert. SeineGetFormat
Methode gibt eine kulturspezifischeNumberFormatInfo
oderDateTimeFormatInfo
Objekt, je nachdem , ob dasCultureInfo
Objekt in einer Formatierung oder Parsen Operation verwendet wird , die Zahlen oder Datumsangaben und Zeiten beinhaltet.Das .NET Framework unterstützt auch benutzerdefinierte Formatierungen. Dies beinhaltet normalerweise die Erstellung einer Formatierungsklasse, die sowohl IFormatProvider als auch ICustomFormatter implementiert. Eine Instanz dieser Klasse wird dann als Parameter an eine Methode übergeben, die eine benutzerdefinierte Formatierungsoperation ausführt, z
String.Format(IFormatProvider, String, Object[])
.quelle
Die DateTimeFormatInfo- Klasse implementiert diese Schnittstelle, sodass Sie die Formatierung Ihrer DateTime-Zeichenfolgen steuern können.
quelle