Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.
Die dateTimeInvalidLocalFormat MDA wird aktiviert, wenn eine DateTime Instanz, die als utc (Universal Coordinated Time) gespeichert ist, mit einem Format formatiert wird, das nur für lokale DateTime Instanzen verwendet werden soll. Diese MDA wird für nicht angegebene oder Standardinstanzen DateTime nicht aktiviert.
Symptom
Eine Anwendung serialisiert manuell eine UTC-Instanz DateTime mit einem lokalen Format:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz"));
Ursache
Das Format "z" für die DateTime.ToString Methode enthält den Lokalen Zeitzonenoffset, z. B. "+10:00" für Sydney-Zeit. Daher wird nur dann ein aussagekräftiges Ergebnis erzeugt, wenn der Wert der DateTime Lokalen ist. Wenn der Wert UTC-Zeit ist, DateTime.ToString schließt den Offset der lokalen Zeitzone ein, zeigt den Zeitzonenbezeichner jedoch nicht an oder passt ihn an.
Resolution
UTC-Instanzen DateTime sollten auf eine Weise formatiert werden, die angibt, dass sie UTC sind. Das empfohlene Format für UTC-Zeiten für die Verwendung eines "Z", um UTC-Zeit zu kennzeichnen:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ"));
Es gibt auch ein "o"-Format, das die DateTime Verwendung der Kind Eigenschaft serialisiert, die ordnungsgemäß serialisiert wird, unabhängig davon, ob die Instanz lokal, UTC oder nicht angegeben ist:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("o"));
Effekt auf die Laufzeit
Diese MDA wirkt sich nicht auf die Laufzeit aus.
Output
Aufgrund dieser MDA-Aktivierung gibt es keine spezielle Ausgabe. Der Aufrufstapel kann jedoch verwendet werden, um die Position des Aufrufs zu bestimmen, der ToString die MDA aktiviert hat.
Konfiguration
<mdaConfig>
<assistants>
<dateTimeInvalidLocalFormat />
</assistants>
</mdaConfig>
Beispiel
Erwägen Sie eine Anwendung, die einen UTC-Wert DateTime indirekt serialisiert, indem Sie die klasse oder DataSet die XmlConvert folgende Art verwenden.
DateTime myDateTime = DateTime.UtcNow;
String serialized = XMLConvert.ToString(myDateTime);
Bei den XmlConvert Serialisierungen werden DataSet standardmäßig lokale Formate für die Serialisierung verwendet. Zusätzliche Optionen sind erforderlich, um andere Arten von DateTime Werten zu serialisieren, z. B. UTC.
Übergeben XmlDateTimeSerializationMode.RoundtripKind Sie für dieses bestimmte Beispiel an den Anruf XmlConvertan .ToString Dadurch werden die Daten als UTC-Zeit serialisiert.
Wenn Sie eine DataSet, legen Sie die DateTimeMode Eigenschaft für das DataColumn Objekt auf Utc.
DateTime myDateTime = DateTime.UtcNow;
String serialized = XmlConvert.ToString(myDateTime,
XmlDateTimeSerializationMode.RoundtripKind);