dateTimeInvalidLocalFormat MDA

dateTimeInvalidLocalFormat Evrensel Eşgüdümlü Saat (UTC) olarak depolanan bir DateTime örnek yalnızca yerel DateTime örnekler için kullanılması amaçlanan bir biçim kullanılarak biçimlendirildiğinde MDA etkinleştirilir. Bu MDA belirtilmeyen veya varsayılan DateTime örnekler için etkinleştirilmedi.

Belirti

Uygulama, yerel biçimi kullanarak UTC DateTime örneğini el ile seri hale getiriliyor:

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

Nedeni

Yöntemin DateTime.ToString 'z' biçimi yerel saat dilimi uzaklığını içerir; örneğin, Sidney saati için "+10:00". Bu nedenle, yalnızca değerinin DateTime yerel olması durumunda anlamlı bir sonuç üretir. Değer UTC saati ise, DateTime.ToString yerel saat dilimi uzaklığını içerir, ancak saat dilimi belirticisini görüntülemez veya ayarlamaz.

Çözüm

UTC örnekleri UTC DateTime olduğunu gösterecek şekilde biçimlendirilmelidir. UTC saatini belirtmek üzere 'Z' kullanmak üzere UTC saatleri için önerilen biçim:

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

Ayrıca, örneğin yerel, UTC veya belirtilmemiş olmasına bakılmaksızın doğru seri hale getiren özelliğin kullanımını Kind seri hale getiren bir DateTime "o" biçimi de vardır:

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

Çalışma Zamanı Üzerindeki Etkisi

Bu MDA çalışma zamanını etkilemez.

Çıktı

Bu MDA etkinleştirmesinin sonucu olarak özel bir çıkış yoktur. Ancak, çağrı yığını MDA'yı etkinleştiren çağrının ToString konumunu belirlemek için kullanılabilir.

Yapılandırma

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

Örnek

aşağıdaki şekilde veya DataSet sınıfını kullanarak XmlConvert bir UTC DateTime değerini dolaylı olarak seri hale getiren bir uygulamayı düşünün.

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

XmlConvert ve DataSet serileştirmeleri, varsayılan olarak seri hale getirme için yerel biçimleri kullanır. UTC gibi diğer değer türlerini DateTime seri hale getirmek için ek seçenekler gereklidir.

Bu özel örnek için üzerindeki XmlConvertçağrısına ToString geçirinXmlDateTimeSerializationMode.RoundtripKind. Bu, verileri UTC saati olarak serileştirir.

kullanıyorsanız DataSetnesnesindeki DateTimeModeDataColumn özelliğini olarak Utcayarlayın.

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

Ayrıca bkz.