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 ToString
XmlConvert
geç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);