Подтвердить что ты не робот

Можете ли вы указать формат для XmlSerialization datetime?

Мне нужно сериализовать /deserialize datetime в формате yyyyMMdd для XML файла. Есть ли атрибут/обходной путь, который я могу использовать для этого?

4b9b3361

Ответ 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