dateTimeInvalidLocalFormat MDA
Feljegyzés
Ez a cikk a .NET-keretrendszer vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.
Az dateTimeInvalidLocalFormat
MDA akkor aktiválódik, ha egy DateTime univerzális koordinált időpontként (UTC) tárolt példány olyan formátummal van formázva, amely csak helyi DateTime példányokhoz használható. Ez az MDA nincs aktiválva meghatározatlan vagy alapértelmezett DateTime példányok esetén.
Tünet
Egy alkalmazás manuálisan szerializál egy UTC-példányt DateTime helyi formátum használatával:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz"));
Ok
A metódus "z" formátuma tartalmazza a DateTime.ToString helyi időzóna-eltolást, például a "+10:00" értéket Sydney-idő esetén. Ezért csak akkor hoz értelmes eredményt, ha az érték DateTime helyi. Ha az érték UTC idő, DateTime.ToString akkor a helyi időzóna eltolását is tartalmazza, de nem jeleníti meg és nem módosítja az időzóna-meghatározót.
Resolution (Osztás)
Az UTC-példányokat DateTime úgy kell formázni, hogy az utc-et jelezze. Az UTC-időpontok ajánlott formátuma a "Z" betűvel az UTC-idő jelölésére:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ"));
Létezik egy "o" formátum is, amely szerializálja DateTime a Kind megfelelően szerializálható tulajdonság használatát, függetlenül attól, hogy a példány helyi, UTC vagy meghatározatlan:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("o"));
Effektus a futtatókörnyezetre
Ez az MDA nem befolyásolja a futtatókörnyezetet.
Hozam
Az MDA aktiválásának eredményeként nincs külön kimenet. A hívásverem azonban használható az MDA-t aktiváló hívás helyének ToString meghatározására.
Konfiguráció
<mdaConfig>
<assistants>
<dateTimeInvalidLocalFormat />
</assistants>
</mdaConfig>
Példa
Fontolja meg azt az alkalmazást, amely közvetve szerializál egy UTC-értéket DateTime az vagy DataSet az XmlConvert osztály használatával az alábbi módon.
DateTime myDateTime = DateTime.UtcNow;
String serialized = XMLConvert.ToString(myDateTime);
A XmlConvert szerializációk alapértelmezés DataSet szerint helyi formátumokat használnak a szerializáláshoz. Más típusú értékek, például az UTC szerializálásához DateTime további beállításokra van szükség.
Ebben a konkrét példában XmlDateTimeSerializationMode.RoundtripKind
adja át a ToString
hívást XmlConvert
. Ez utc-időpontként szerializálja az adatokat.
Ha egy objektumot DataSethasznál, állítsa az DateTimeMode objektum tulajdonságát a DataColumn következőre Utc: .
DateTime myDateTime = DateTime.UtcNow;
String serialized = XmlConvert.ToString(myDateTime,
XmlDateTimeSerializationMode.RoundtripKind);