你能指定日期时间的XmlSerialization格式吗?

时间:2009-07-13 10:59:36

标签: c# xml serialization

我需要将日期时间序列化/反序列化为yyyyMMdd格式的XML文件。我可以使用属性/解决方法吗?

3 个答案:

答案 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的数字。

  • 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提供四舍五入代码at this other SO answer