Aracılığıyla paylaş


dateTimeInvalidLocalFormat MDA

Not

Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.

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

Bir uygulama, yerel bir biçim kullanarak UTC DateTime örneğini el ile seri hale getirerek:

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

Neden

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 tanımlayıcısını 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 şekilde 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 bir sonucu olarak özel bir çıkış yoktur. Bununla birlikte, ç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

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

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

XmlConvert ve DataSet serileştirmeleri, varsayılan olarak serileştirme 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 üzerinde çağrısına ToStringXmlConvertgeçinXmlDateTimeSerializationMode.RoundtripKind. Bu, verileri UTC saati olarak serileştirir.

kullanıyorsanız DataSet, nesnesinde DateTimeModeDataColumn özelliğini olarak Utcayarlayın.

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

Ayrıca bkz.