gpt4 book ai didi

c# - 如何创建表示 DateTime 中日期的 XElement 类型为 xs :Date

转载 作者:可可西里 更新时间:2023-11-01 08:46:49 25 4
gpt4 key购买 nike

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

var d = DateTime.Now;

var xDocument = new XDocument(new XElement("ThisIsADate", d));

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

但是,我的 XML 旨在匹配我的 XML 架构,它将元素定义为“xs:date”类型。因此,由于额外的时间信息,文件在根据架构进行验证时会被拒绝。

我该如何解决这个问题?我知道我可以自己使用带有格式的 ToString() 来格式化日期,但这当然不是“正确”的方法。我不能指望知道如何将日期格式化为有效的 XML 日期 - 这是框架中与 XML 相关的部分的工作。


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

需要说明的是,我不是要“完成它”,而是要“把它做好”。重新发明 XML 轮子并不是我书中的“正确做法”。

最佳答案

正如已经指出的那样,LINQ to XML 无法使用 xs:date 格式生成 DateTime 值。 LINQ to XML 中的 DateTime 使用 xs:dateTime 格式往返,而 .NET 没有仅日期类型,因此设计人员并不感到意外的 LINQ to XML 决定只使用 xs:dateTime 以不使 API 复杂化。

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

d.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)

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

关于c# - 如何创建表示 DateTime 中日期的 XElement 类型为 xs :Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11522002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com