Какой правильный формат использовать для даты / времени в XML-файле

98

Какой формат я использую для даты / времени при записи в файл XML с помощью .NET? Я просто использую DateTime.ToString()или мне нужно использовать определенный формат?

Джон Б
источник

Ответы:

138

Я всегда использую формат ISO 8601 (например 2008-10-31T15:07:38.6875000-05:00) - date.ToString("o"). Это также формат даты XSD . Это предпочтительный формат и строка стандартного формата даты и времени , хотя при необходимости вы можете использовать строку ручного формата, если вам не нужна буква «T» между датой и временем:date.ToString("yyyy-MM-dd HH:mm:ss");

EDIT: если вы используете сгенерированный класс из XSD или веб-службы, вы можете просто назначить экземпляр DateTime непосредственно свойству класса. Если вы пишете текст XML, используйте указанное выше.

Райан
источник
44

РЕДАКТИРОВАТЬ: Это плохой совет. Используйте "o", как указано выше. "s" делает неправильные вещи .

Я всегда использую это:

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

Это правильно, если ваша схема выглядит так:

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

Это приведет к:

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

Вы можете получить дополнительную информацию здесь: http://www.w3schools.com/xml/schema_dtypes_date.asp

Джонни
источник
10
Имейте в виду, что это преобразует дату в UTC. Когда вы обрабатываете дату, вы должны преобразовать ее обратно в текущий часовой пояс в зависимости от языкового стандарта (если вы не обрабатываете все в UTC). Кроме того, обычно вы помещаете букву Z в конце, чтобы обозначить дату в формате UTC.
Райан
"s" работает для меня при вызове веб-службы .net из пользовательского интерфейса мыла.
Тристан Ченнинг
4

Если вы вручную собираете XML-строку, используйте var.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ")); That будет выводить официальный формат даты и времени XML. Но вам не нужно беспокоиться о формате, если вы используете встроенные методы сериализации.

холодная температура
источник
jonnii вернет в основном тот же результат.
chilltemp
3
В этом случае все даты ДОЛЖНЫ быть в часовом поясе UTC, иначе использование суффикса "Z" неверно.
Fr0sT
Я повторю предыдущий комментарий - это неверно, если dt не является utc.
Брэди Мориц
3

Что говорит DTD?

Если XML-файл предназначен для связи с другим существующим программным обеспечением (например, SOAP), проверьте это программное обеспечение на предмет того, что оно ожидает.

Если файл XML предназначен для сериализации или связи с несуществующим программным обеспечением (например, с тем, которое вы пишете), вы можете определить его. В этом случае я бы предложил что-то, что легко проанализировать на выбранном вами языке (ах) и легко прочитать людям. например, если ваш язык (будь то VB.NET или C # .NET или что-то еще) позволяет легко анализировать даты ISO (YYYY-MM-DD), я бы предложил именно это.

Tanktalus
источник
0

XmlConvertКласс предоставляет следующие виды объектов. В отношении DateTimes, в частности, будьте осторожны с устаревшими методами. См. Также: https://stackoverflow.com/a/7457718/1288109

Старнуто ди топо
источник