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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin