Sdílet prostřednictvím


dateTimeInvalidLocalFormat – pomocník spravovaného ladění (MDA)

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

MdA dateTimeInvalidLocalFormat se aktivuje, když DateTime je instance uložená jako univerzální koordinovaný čas (UTC) formátovaná pomocí formátu, který má být použit pouze pro místní DateTime instance. Tato funkce MDA není aktivována pro nezadané nebo výchozí DateTime instance.

Příznaky

Aplikace ručně serializuje instanci UTC DateTime pomocí místního formátu:

DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz"));

Příčina

Formát 'z' pro metodu DateTime.ToString zahrnuje posun místního časového pásma, například +10:00 pro sydney čas. V takovém případě vytvoří smysluplný výsledek pouze v případě, že je hodnota DateTime místního. Pokud je hodnota čas UTC, DateTime.ToString zahrnuje posun místního časového pásma, ale nezobrazuje ani neupravuje specifikátor časového pásma.

Rozlišení

Instance UTC DateTime by měly být formátovány způsobem, který označuje, že jsou utc. Doporučený formát pro časy UTC pro použití "Z" k označení času UTC:

DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ"));

Existuje také formát "o", který serializuje použití Kind vlastnosti, která serializuje DateTime správně bez ohledu na to, zda je instance místní, UTC nebo nespecifikovaná:

DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("o"));

Vliv na modul runtime

Tato funkce MDA nemá vliv na modul runtime.

Výstup

V důsledku aktivace MDA neexistuje žádný speciální výstup. Zásobník volání však lze použít k určení umístění ToString volání, které aktivovalo MDA.

Konfigurace

<mdaConfig>
  <assistants>
    <dateTimeInvalidLocalFormat />
  </assistants>
</mdaConfig>

Příklad

Vezměte v úvahu aplikaci, která nepřímo serializuje hodnotu UTC DateTime pomocí XmlConvert nebo DataSet třídy následujícím způsobem.

DateTime myDateTime = DateTime.UtcNow;
String serialized = XMLConvert.ToString(myDateTime);

DataSet Při XmlConvert serializaci se ve výchozím nastavení používají místní formáty pro serializaci. Další možnosti jsou vyžadovány k serializaci jiných druhů DateTime hodnot, například UTC.

V tomto konkrétním příkladu ToString předejte XmlDateTimeSerializationMode.RoundtripKind volání XmlConvert. Tím se data serializuje jako čas UTC.

Pokud používáte DataSet, nastavte DateTimeMode vlastnost objektu DataColumn na Utc.

DateTime myDateTime = DateTime.UtcNow;
String serialized = XmlConvert.ToString(myDateTime,
    XmlDateTimeSerializationMode.RoundtripKind);

Viz také