如何在DateTime中创建表示日期的XElement,类型为xs:Date

Gar*_*ill 11 c# xml xsd

我正在使用XDocument创建XML文件,如下所示:

var d = DateTime.Now;

var xDocument = new XDocument(new XElement("ThisIsADate", d));
Run Code Online (Sandbox Code Playgroud)

但是,生成的XML表示使用xs:datetime格式的日期d(例如"2012-05-11T00:00:00").也就是说,它包括时间信息.

但是,我的XML旨在匹配我的XML Schema,它将元素定义为类型为"xs:date".因此,由于额外的时间信息,在针对模式进行验证时会拒绝该文件.

我怎样才能解决这个问题?我知道我可以使用带有格式的ToString()来自己格式化日期,但这肯定不是"正确"的方法.我不能指望如何将日期格式化为有效的XML日期 - 这是框架的XML相关部分的工作.


编辑:请注意,我知道如何格式化日期使用的ToString(),我也知道什么格式字符串会给我正确的结果.这不是我正在寻找的答案.我正在寻找一个函数/方法/类,它理解xs:date(等等)是什么,并支持那些类型的编码.

要清楚,我不是要"完成它",我希望"做得对".在我的书中重新发明XML轮并不是"做得对".

Mar*_*age 6

正如已经指出的那样,LINQ to XML无法DateTime使用该xs:date格式生成值.一个DateTime使用往返在LINQ to XML xs:dateTime格式和.NET没有一个有一个日期,只输入,所以它不是一个惊喜是LINQ到XML的设计者决定只使用xs:dateTime该API并不复杂.

唯一的选择是将日期格式化为字符串,使您可以完全控制格式.要正确使用xs:date您需要的格式,请DateTime使用以下代码将其转换为字符串:

d.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

使用ToShortDateString和/或不指定CultureInfo不会产生所需的结果.