Apa format yang benar untuk digunakan pada Tanggal / Waktu dalam file XML

98

Format apa yang saya gunakan untuk Tanggal / Waktu saat menulis ke file XML menggunakan .NET? Apakah saya hanya menggunakan DateTime.ToString(), atau haruskah saya menggunakan format tertentu?

Jon B
sumber

Jawaban:

138

Saya selalu menggunakan format ISO 8601 (misalnya 2008-10-31T15:07:38.6875000-05:00) - date.ToString("o"). Ini adalah format tanggal XSD juga. Itu adalah format yang disukai dan string Format Tanggal dan Waktu Standar , meskipun Anda dapat menggunakan string format manual jika perlu jika Anda tidak menginginkan 'T' di antara tanggal dan waktu:date.ToString("yyyy-MM-dd HH:mm:ss");

EDIT: Jika Anda menggunakan kelas yang dihasilkan dari XSD atau Layanan Web, Anda dapat menetapkan contoh DateTime langsung ke properti kelas. Jika Anda menulis teks XML, gunakan cara di atas.

Ryan
sumber
44

EDIT: Ini adalah nasihat yang buruk. Gunakan "o", seperti di atas. "s" melakukan hal yang salah .

Saya selalu menggunakan ini:

dateTime.ToUniversalTime().ToString("s");

Ini benar jika skema Anda terlihat seperti ini:

<xs:element name="startdate" type="xs:dateTime"/>

Yang akan menghasilkan:

<startdate>2002-05-30T09:00:00</startdate>

Anda bisa mendapatkan informasi lebih lanjut di sini: http://www.w3schools.com/xml/schema_dtypes_date.asp

jonnii
sumber
10
Ingatlah bahwa ini mengubah tanggal menjadi UTC. Saat Anda memproses tanggal, Anda harus mengubahnya kembali ke zona waktu Anda saat ini berdasarkan lokal (kecuali jika Anda memproses semuanya dalam UTC). Juga, biasanya Anda akan meletakkan 'Z' di akhir untuk menunjukkan tanggalnya UTC.
Ryan
"s" berfungsi untuk saya saat memanggil layanan web .net dari ui sabun.
Tristan Channing
4

Jika Anda merakit secara manual menggunakan string XML var.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ")); Yang akan menampilkan format Tanggal Waktu XML resmi. Tetapi Anda tidak perlu khawatir tentang format jika Anda menggunakan metode serialisasi bawaan.

dinginkan
sumber
jonnii pada dasarnya akan mengembalikan hasil yang sama.
chilltemp
3
Dalam hal ini semua tanggal HARUS dalam zona waktu UTC jika tidak, penggunaan akhiran "Z" salah.
Fr0sT
Saya akan mengulangi komentar sebelumnya - ini sebenarnya salah jika dt bukan utc.
Brady Moritz
3

Apa yang DTD katakan?

Jika file XML adalah untuk berkomunikasi dengan perangkat lunak lain yang ada (misalnya, SOAP), maka periksa perangkat lunak itu untuk apa yang diharapkan.

Jika file XML adalah untuk serialisasi atau komunikasi dengan perangkat lunak yang tidak ada (misalnya, yang Anda tulis), Anda dapat menentukannya. Dalam hal ini, saya menyarankan sesuatu yang mudah diurai dalam bahasa pilihan Anda, dan mudah dibaca oleh manusia. misalnya, jika bahasa Anda (apakah VB.NET atau C # .NET atau apa pun) memungkinkan Anda untuk mengurai tanggal ISO (YYYY-MM-DD) dengan mudah, itulah yang saya sarankan.

Tanktalus
sumber