我需要将日期时间序列化/反序列化为yyyyMMdd格式的XML文件。我可以使用属性/解决方法吗?
答案 0 :(得分:60)
不,没有。如果它采用那种格式,那么就XML Schema而言,它不是一个有效的dateTime。
您可以做的最好的事情如下:
[XmlIgnore]
public DateTime DoNotSerialize {get;set;}
public string ProxyDateTime {
get {return DoNotSerialize.ToString("yyyyMMdd");}
set {DoNotSerialize = DateTime.Parse(value);}
}
答案 1 :(得分:18)
XmlElementAttribute #DataType应提供您所需的内容:
[XmlElement(DataType="date")]
public DateTime Date1 {get;set;}
这会将 Date1 属性序列化为正确的xml date格式。
答案 2 :(得分:0)
我不希望我的时间码达到小数秒后的7位以上。我希望外观更简洁,因为我可能有机会手动编辑该值。我不介意最后使用-04:00
偏移量,因此我将时间值舍入到最接近的毫秒数。这使我得到了小数点后三位的数字,我相信我的程序进行的任何比较仍然足够准确。
我本可以使用TimeSpan.FromMilliseconds(1).Ticks
因为它等于TimeSpan.FromTicks(10000).Ticks
,但我希望能够更轻松地更改小数秒内的位数,并且FromMilliseconds
不会接受小于1的数字。
_
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提供四舍五入代码at this other SO answer