Мне нужно сериализовать /deserialize datetime в формате yyyyMMdd для XML файла. Есть ли атрибут/обходной путь, который я могу использовать для этого?
Можете ли вы указать формат для XmlSerialization datetime?
Ответ 1
Нет, нет. Если он в этом формате, то это не допустимое значение dateTime в отношении XML-схемы.
Лучшее, что вы можете сделать, это следующее:
[XmlIgnore]
public DateTime DoNotSerialize {get;set;}
public string ProxyDateTime {
get {return DoNotSerialize.ToString("yyyyMMdd");}
set {DoNotSerialize = DateTime.Parse(value);}
}
Ответ 2
XmlElementAttribute #DataType должен предоставить то, что вам нужно:
[XmlElement(DataType="date")]
public DateTime Date1 {get;set;}
Это приведет к тому, что свойство Date1 будет сериализовано в соответствии с форматом xml date.
Ответ 3
Я не хотел, чтобы мой временной код переходил к цифрам 7+ в течение доли секунды. Я хотел выглядеть немного чище, потому что у меня есть возможность вручную отредактировать значение. Я не против использования смещения -04:00
в конце, поэтому я просто округляю значение времени до ближайшей миллисекунды. Это дает мне 3 цифры за доли секунды, и я считаю, что все еще достаточно точен для любых сравнений, которые сделает моя программа.
Я мог бы использовать TimeSpan.FromMilliseconds(1).Ticks
поскольку он равен TimeSpan.FromTicks(10000).Ticks
, но я хотел бы иметь возможность более легко изменять количество мест в долях секунды, а FromMilliseconds
не примет число меньше 1.
- 100 тиков дают доли секунды до 5 мест
- 1000 клещей производит до 4 мест
- 10000 тиков дают 3 места
_
private DateTime lastRun;
public DateTime LastRun {
get{
var delta = lastRun.Ticks % TimeSpan.FromTicks(10000).Ticks;
lastRun = new DateTime(lastRun.Ticks - delta, lastRun.Kind);
return lastRun;
}
set {
var delta = value.Ticks % TimeSpan.FromTicks(10000).Ticks;
lastRun = new DateTime(value.Ticks - delta, value.Kind);
}
}
Спасибо aj.toulan за округленный код в этом другом ответе SO