Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.
dateTimeInvalidLocalFormat MDA diaktifkan saat DateTime instans yang disimpan sebagai Universal Coordinated Time (UTC) diformat menggunakan format yang dimaksudkan untuk digunakan hanya untuk instans lokalDateTime. MDA ini tidak diaktifkan untuk instans yang tidak ditentukan atau default DateTime .
Gejala
Aplikasi secara manual menserialisasikan instans UTC DateTime menggunakan format lokal:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz"));
Penyebab
Format 'z' untuk DateTime.ToString metode ini mencakup offset zona waktu lokal, misalnya, "+10:00" untuk waktu Sydney. Dengan demikian, itu hanya akan menghasilkan hasil yang bermakna jika nilainya DateTime lokal. Jika nilainya adalah waktu UTC, DateTime.ToString menyertakan offset zona waktu lokal, tetapi tidak menampilkan atau menyesuaikan penentu zona waktu.
Resolution
Instans UTC DateTime harus diformat dengan cara yang menunjukkan bahwa instans tersebut adalah UTC. Format yang direkomendasikan untuk waktu UTC untuk menggunakan 'Z' untuk menunjukkan waktu UTC:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ"));
Ada juga format "o" yang menserialisasikan DateTime penggunaan Kind properti yang diserialisasikan dengan benar terlepas dari apakah instans bersifat lokal, UTC, atau tidak ditentukan:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("o"));
Efek pada Runtime
MDA ini tidak memengaruhi runtime.
Hasil
Tidak ada output khusus sebagai akibat dari MDA ini mengaktifkan., Namun, tumpukan panggilan dapat digunakan untuk menentukan lokasi ToString panggilan yang mengaktifkan MDA.
Konfigurasi
<mdaConfig>
<assistants>
<dateTimeInvalidLocalFormat />
</assistants>
</mdaConfig>
Example
Pertimbangkan aplikasi yang secara tidak langsung menserialisasikan nilai UTC DateTime dengan menggunakan XmlConvert kelas atau DataSet , dengan cara berikut.
DateTime myDateTime = DateTime.UtcNow;
String serialized = XMLConvert.ToString(myDateTime);
Serialisasi XmlConvert dan DataSet menggunakan format lokal untuk serialisasi secara default. Opsi tambahan diperlukan untuk menserialisasikan jenis DateTime nilai lain, seperti UTC.
Untuk contoh spesifik ini, teruskan XmlDateTimeSerializationMode.RoundtripKindToString ke panggilan di XmlConvert. Ini menserialisasikan data sebagai waktu UTC.
Jika menggunakan , atur DateTimeMode properti pada objek ke DataColumnUtc.DataSet
DateTime myDateTime = DateTime.UtcNow;
String serialized = XmlConvert.ToString(myDateTime,
XmlDateTimeSerializationMode.RoundtripKind);