C# 日期时间。现在没有小数秒

C# 日期时间。现在没有小数秒,c#,xml,datetime,xsd,C#,Xml,Datetime,Xsd,如何将DateTime.Now转换为xsd:DateTime格式2004-04-12T13:20:00-05:00,并最终将其分配给架构xsd中xsd:DateTime类型的DateTime属性(而不是string) 财产: public System.DateTime Timestamp { get { return this.timestampField; } set { this.timesta

如何将
DateTime.Now
转换为
xsd:DateTime
格式
2004-04-12T13:20:00-05:00
,并最终将其分配给架构xsd中
xsd:DateTime
类型的
DateTime
属性(而不是
string

财产:

public System.DateTime Timestamp {
        get {
            return this.timestampField;
        }
        set {
            this.timestampField = value;
        }
Xsd:

我在xml中得到以下信息,根据xsd模式验证,该信息无效

<Timestamp>2014-07-18T17:27:04.3185791-04:00</Timestamp>
2014-07-18T17:27:04.3185791-04:00
我试图找出如何为Timestamp属性分配适当的值,该属性根据xsd模式是有效的。例如,2004-04-12T13:20:00-05:00,没有小数秒。

如果你看这个,你会发现它说明(我的重点):

在内部,DateTime值表示为自0001年1月1日午夜12:00:00以来经过的滴答数(100纳秒间隔的数目)。实际日期时间值与该值在用户界面元素中显示或写入文件时的显示方式无关。DateTime值的外观是格式化操作的结果。格式化是将值转换为其字符串表示形式的过程

由于日期和时间值的外观取决于文化、国际标准、应用程序要求和个人偏好等因素,因此DateTime结构通过其ToString方法的重载在格式化日期和时间值方面提供了极大的灵活性。默认的DateTime.ToString()方法使用当前区域性的短日期和长时间模式返回日期和时间值的字符串表示形式。下面的示例使用默认的DateTime.ToString()方法,使用en US区域性的短日期和长时间模式显示日期和时间,该区域性是运行该示例的计算机上的当前区域性

因此,基于此,您可能希望尝试从时间戳的特定字段中创建一个新的
DateTime
对象,该字段是从
DateTime创建的。现在
这将消除表示时间间隔小于1秒的刻度。如果这不起作用,您可能使用了错误的类型,请改用字符串

i、 e


实际写入XML的字段或属性的类型可能应该是
String
,也可能是自定义类型,而不是
DateTime
,它在
XmlSerializer
中内置了一些特殊处理。但是,您当然可以有一个
DateTime
属性来抽象底层字段的获取和设置

下面是一个例子:

using System;
using System.Xml.Serialization;

namespace Sandbox2
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            var now = DateTime.Now;
            var m = new Moment () { Timestamp = now };
            var xs = new XmlSerializer (typeof(Moment));
            xs.Serialize (Console.Out, m);
        }
    }

    public class Moment
    {
        [XmlElement("Timestamp")]
        public string BackingTimestamp;

        [XmlIgnore]
        public DateTime Timestamp
        {
            get
            {
                return DateTime.Parse (BackingTimestamp);
            }
            set
            {
                BackingTimestamp = value.ToString ("yyyy-MM-ddTHH:mm:ssK");
            }
        }
    }
}
输出的相关部分:

<Timestamp>2014-07-19T12:20:24-05:00</Timestamp>
2014-07-19T12:20:24-05:00

您需要提供尽可能多的代码,向我们展示您正在尝试做什么。至少让我们开发解决方案变得容易。您尝试了什么?添加了额外的详细信息/代码以及我在帖子中尝试的内容。您可以为DateTime.ToString()指定任意格式。它是一个datetime属性-如果它的字符串我可以通过指定相应的格式轻松地将datetime转换为字符串。这里的问题是我被datetime属性击中了。请显示代码中执行序列化的部分。我如何将时间戳视为与XSD中给出的模式匹配的字符串,有什么建议吗?我正在尝试,但我认为这是不对的。这个日期时间是如何序列化的<代码>时间戳ToString(“o”)“2015-08-23T00:11:37.0000000-05:00”
Timestamp = Datetime.Now;
Timestamp = new DateTime(Timestamp.Year,Timestamp.Month,Timestamp.Day,Timestamp.Hour,Timestamp.Minute,Timestamp.Second,Timestamp.Kind);
using System;
using System.Xml.Serialization;

namespace Sandbox2
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            var now = DateTime.Now;
            var m = new Moment () { Timestamp = now };
            var xs = new XmlSerializer (typeof(Moment));
            xs.Serialize (Console.Out, m);
        }
    }

    public class Moment
    {
        [XmlElement("Timestamp")]
        public string BackingTimestamp;

        [XmlIgnore]
        public DateTime Timestamp
        {
            get
            {
                return DateTime.Parse (BackingTimestamp);
            }
            set
            {
                BackingTimestamp = value.ToString ("yyyy-MM-ddTHH:mm:ssK");
            }
        }
    }
}
<Timestamp>2014-07-19T12:20:24-05:00</Timestamp>