当前位置:  开发笔记 > 编程语言 > 正文

字符串'3/18/09 10:16 PM'不是有效的AllXsd值

如何解决《字符串'3/18/0910:16PM'不是有效的AllXsd值》经验,为你挑选了2个好方法。

显然,读者不喜欢从响应XML传入的这种格式.

想知道我是否可以重新格式化.尝试DateTime使用以下代码转换为使用以下代码XmlReader:

reader.ReadContentAsDateTime();

David Norman.. 99

根据XML 模式规范,日期时间值应该是ISO8601格式,例如,类似于

2009-03-13T22:16:00

在ruby中使用`iso8601`方法,例如`Time.now.iso8601`. (2认同)

出于好奇,ISO8601格式看起来应该像`2009-03-18T22:16:00-05:00`,但David的答案(省略时区)也适合我(而ISO8601格式则不然).这是因为XmlConverter中的本地序列化(因此不需要时区)? (2认同)


Marc Gravell.. 51

Xml阅读器通常以非常特定的格式预期日期/时间; 您可以自己使用XmlConvert:

string s = XmlConvert.ToString(DateTime.Now);
DateTime when = XmlConvert.ToDateTime(s);

如果您正在使用其他内容,则必须将其作为字符串读取并使用DateTime.TryParseExact(或类似)指定实际的格式字符串:

string s = reader.ReadContentAsString();
DateTime when = DateTime.ParseExact(s, "M/d/yy hh:mm tt",
     CultureInfo.InvariantCulture);

如果您正在使用XmlSerializer,您可以使用垫片属性进行转换 - 让我知道这是您正在做的...



1> David Norman..:

根据XML 模式规范,日期时间值应该是ISO8601格式,例如,类似于

2009-03-13T22:16:00


在ruby中使用`iso8601`方法,例如`Time.now.iso8601`.
出于好奇,ISO8601格式看起来应该像`2009-03-18T22:16:00-05:00`,但David的答案(省略时区)也适合我(而ISO8601格式则不然).这是因为XmlConverter中的本地序列化(因此不需要时区)?

2> Marc Gravell..:

Xml阅读器通常以非常特定的格式预期日期/时间; 您可以自己使用XmlConvert:

string s = XmlConvert.ToString(DateTime.Now);
DateTime when = XmlConvert.ToDateTime(s);

如果您正在使用其他内容,则必须将其作为字符串读取并使用DateTime.TryParseExact(或类似)指定实际的格式字符串:

string s = reader.ReadContentAsString();
DateTime when = DateTime.ParseExact(s, "M/d/yy hh:mm tt",
     CultureInfo.InvariantCulture);

如果您正在使用XmlSerializer,您可以使用垫片属性进行转换 - 让我知道这是您正在做的...


@burhan通过查看价值的来源,并妥善处理它?或者,核心框架包括可以做得更好的以RSS为目标的类.
@burhan解决方案一如既往地拥有xml和匹配的模型.有时这意味着你可以直接进行 - 你可能需要将日期作为字符串类型(而不是DateTime),然后对其进行额外的后处理以解析时间.但是,随机链接不能提供您正在努力解决的确切xml.
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有