Partilhar via


dateTimeInvalidLocalFormat MDA

The dateTimeInvalidLocalFormat O MDA é ativado quando um DateTime instância é armazenada sistema autônomo um horário coordenado universal (UTC) está formatada usando um formato específico a ser usado somente para o local DateTime instâncias. Este MDA não está ativado para não for especificado ou padrão de DateTime instâncias.

Sintoma

Um aplicativo é fazer serialização manual um UTC DateTime instância usando um formato local:

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

Causa

O formato 'z' para o DateTime.ToStringmétodo inclui o deslocamento de fuso horário local, por exemplo, "+ 10: 00" para o time de Sydney. sistema autônomo tal, ele só produzirá um resultado significativo se o valor de DateTime é local. Se o valor for time UTC, DateTime.ToString inclui a time local deslocado de zona, mas não exibir ou ajustar o especificador de fuso horário.

Resolução

UTC DateTime instâncias devem ser formatadas de forma que indica que elas são UTC. O formato recomendado para horários de UTC usar a 'Z' para denotar time UTC:

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

Há também um formato de "o" serializa umDateTime utilizando o Kind propriedade serializa corretamente independentemente da instância é local, UTC, ou não especificado:

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

Efeito sobre o tempo de execução

Este MDA não afeta o tempo de execução.

Saída

Não há nenhuma saída especial de ativar este MDA., contudo, a pilha de chamadas pode ser usada para determinar o local do ToString telefonar ativado o MDA.

Configuração

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

Exemplo

Considere um aplicativo que está indiretamente serializando um UTC DateTime valor usando o XmlConvert ou DataSet classe, da seguinte maneira.

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

The XmlConvert e DataSet serializations usam formatos locais para a serialização por padrão. Opções adicionais são necessárias para serializar outros tipos de DateTime valores, sistema autônomo UTC.

Para esse exemplo específico, passe em XmlDateTimeSerializationMode.RoundtripKind para o ToString ligar XmlConvert. Isso serializa sistema autônomo dados sistema autônomo uma time UTC.

Se usando um DataSet, conjunto o DateTimeMode propriedade no DataColumn objeto para Utc.

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

Consulte também

Conceitos

Diagnosticar erros com assistentes de depuração gerenciadas

Referência

DateTimeFormatInfo