Frage

Ich habe das Spiel mit der DateTime.ParseExact Methode, und sie will ein IFormatProvider ...

Es funktioniert Eingabe von null, aber was genau macht sie?

War es hilfreich?

Lösung

In adition zu Ian Boyd Antwort:

Auch CultureInfo implementiert diese Schnittstelle und kann in Ihrem Fall verwendet werden. So könnte man ein Französisch Datum Zeichenfolge beispielsweise analysieren; Sie nutzen könnten

var ci = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);

Andere Tipps

Die IFormatProvider Schnittstelle wird in der Regel für Sie durch eine CultureInfo Klasse implementiert, z.

  • CultureInfo.CurrentCulture
  • CultureInfo.CurrentUICulture
  • CultureInfo.InvariantCulture
  • CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)

Die Schnittstelle ist ein Gateway für eine Funktion eine Reihe von kulturspezifischen Daten aus einer Kultur zu erhalten. Die zwei allgemein verfügbaren Kulturobjekte, die ein IFormatProvider für abgefragt werden kann:

  • DateTimeFormatInfo
  • NumberFormatInfo

Die Art und Weise, es wäre normal arbeiten wird Sie bitten, die IFormatProvider Sie Objekt eine DateTimeFormatInfo zu geben:

DateTimeFormatInfo format;
format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
if (format != null)
   DoStuffWithDatesOrTimes(format);

Es gibt auch Insider-Wissen, dass jede IFormatProvider Schnittstelle wahrscheinlich durch eine Klasse umgesetzt wird, die von CultureInfo absteigt, oder stammt von DateTimeFormatInfo, so könnten Sie die Schnittstelle umgewandelt direkt:

CultureInfo info = provider as CultureInfo;
if (info != null)
   format = info.DateTimeInfo;
else
{
   DateTimeFormatInfo dtfi = provider as DateTimeFormatInfo;
   if (dtfi != null)
       format = dtfi;
   else
       format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
}

if (format != null)
   DoStuffWithDatesOrTimes(format);

Aber tun das nicht

Alles, harte Arbeit wurde Ihnen bereits geschrieben:

Um eine DateTimeFormatInfo von einem IFormatProvider zu erhalten :

DateTimeFormatInfo format = DateTimeFormatInfo.GetInstance(provider);

Um eine NumberFormatInfo von einem IFormatProvider zu erhalten :

NumberFormatInfo format = NumberFormatInfo.GetInstance(provider);

Der Wert von IFormatProvider ist, dass Sie Ihre eigene Kultur Objekte erstellen. Solange sie IFormatProvider implementieren, und das Rück Objekte, die sie gefragt werden, können Sie die integrierten in Kulturen umgehen.

durch die IFormatProvider -

Sie können auch IFormatProvider für eine Art und Weise der Weitergabe beliebige Kulturobjekte verwenden. Z.B. der Name Gott in verschiedenen Kulturen

  • Gott
  • Gott
  • Jehova
  • Jahwes
  • יהוה
  • אהיה אשר אהיה

Auf diese Weise können Sie Ihre individuelle LordsNameFormatInfo Klasse Fahrt entlang innerhalb eines IFormatProvider, und Sie können das Idiom erhalten.

In der Realität werden Sie nie brauchen GetFormat Methode von IFormatProvider selbst zu nennen.

Wenn Sie eine IFormatProvider benötigen, können Sie ein CultureInfo Objekt übergeben:

DateTime.Now.ToString(CultureInfo.CurrentCulture);

endTime.ToString(CultureInfo.InvariantCulture);

transactionID.toString(CultureInfo.CreateSpecificCulture("qps-ploc"));
  

Hinweis : Jeder Code wird in die Public Domain freigegeben. Keine Zuordnung erforderlich.

Passing null als der IFormatProvider nicht der richtige Weg, dies zu tun. Wenn der Benutzer ein benutzerdefiniertes Datum / Zeit-Format auf dem PC hat haben Sie Probleme beim Parsen und Umwandlung in einem String. Ich habe gerade einen Fehler behoben, bei dem jemand null als IFormatProvider war vergangen, als in String umgewandelt wird.

Stattdessen sollten Sie CultureInfo.InvariantCulture werden mit

Falsch:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", null);

Richtig:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", CultureInfo.InvariantCulture);

Sie sehen hier http://msdn.microsoft.com/ en-us / library / system.iformatprovider.aspx

Sehen Sie die Bemerkungen und Beispiel Abschnitt gibt.

IFormatProvider bietet Kultur Informationen zu dem Verfahren in Frage. Datetime implementiert IFormatProvider, und ermöglicht es Ihnen, das Format, Sie möchten Ihre Zeit / Datum in angezeigt werden. Beispiele finden Sie auf den entsprechenden MSDN-Seiten.

Mit dem MSDN

Das .NET Framework enthält die folgenden drei vordefinierte IFormatProvider Implementierungen kulturspezifische Informationen, die bei der Formatierung oder Parsen von numerischen und Datums- und Zeitwerte verwendet wird:

  1. Die NumberFormatInfo-Klasse, die Informationen liefert, die Format-Nummern, wie die Währung verwendet wird, Tausendertrennzeichen und Dezimaltrennzeichen Symbole für eine bestimmte Kultur. Weitere Informationen zu dem vordefinierten Zeichenketten-Format von einem NumberFormatInfo Objekt erkannt und in numerischen Formatierungsoperationen verwendet werden, siehe Standard-Zahlenformatzeichenfolgen und Benutzerdefinierte Zahlenformatzeichenfolgen.
  2. Die DateTimeFormatInfo-Klasse, die Informationen liefert, der Datum- und Uhrzeit, wie Datum und Zeit-Trennzeichen für eine bestimmte Kultur oder die Reihenfolge und das Format eines Datums Jahr, Monat und Tag Komponenten verwendet wird. Weitere Informationen zu den vordefinierten Zeichenketten-Format von einem DateTimeFormatInfo Objekt erkannt und in numerischen Formatierungsoperationen verwendet werden, siehe Datums- und Uhrzeitstandardformatzeichenfolgen und Benutzerdefinierte Datums- und Zeitformatstrings.
  3. Die CultureInfo-Klasse, die eine bestimmte Kultur darstellt. Seine GetFormat Methode gibt ein kulturspezifische NumberFormatInfo oder DateTimeFormatInfo Objekt, je nachdem, ob das CultureInfo Objekt in einer Formatierung oder Parsen Operation verwendet wird, die Zahlen oder Datumsangaben und Zeiten beinhaltet.

Das .NET Framework unterstützt auch benutzerdefinierte Formatierung. Dies umfasst in der Regel die Schaffung einer Formatierung Klasse, die beide IFormatProvider und ICustomFormatter implementiert. Eine Instanz dieser Klasse wird dann als Parameter an eine Methode übergeben, die eine benutzerdefinierte Formatierung, wie String.Format(IFormatProvider, String, Object[]) führt.

Die Datetime Klasse diese Schnittstelle implementiert, so ermöglicht es Ihnen, die Formatierung des Datetime Strings zu steuern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top