如何在类XmlElement c#中设置默认的DateTimeOffset值

本文关键字:默认 设置 DateTimeOffset XmlElement | 更新日期: 2023-09-27 18:02:23

我有以下代码:

public sealed class MyClass
{
    [XmlElement("Remind")]
    public string lastUpdatedTimeForXml2
    {
         get { return Remind.ToString("yyyy-MM-ddTHH:mm:ss"); }
         set { Remind = DateTimeOffset.Parse(value); }
    }
    [XmlIgnore]
    public DateTimeOffset Remind { get; set; }
}

和我的问题是,当提醒值不存在于文件中,它取代它0001-01-01T00:00:00和崩溃行:"set{提醒= DateTimeOffset.Parse(值);} "

编辑。

好的,我是这样解决的:

    [XmlElement("Remind")]
    public string lastUpdatedTimeForXml2
    {
        get { return Remind.ToString("yyyy-MM-ddTHH:mm:ss"); }
        set
        {
            if (value == "0001-01-01T00:00:00")
                Remind = DateTimeOffset.MinValue;
            else
                Remind = DateTimeOffset.Parse(value);
        }
    }
    [XmlIgnore]
现在不是崩溃,但我不知道为什么。这是最好的解决方案吗?

如何在类XmlElement c#中设置默认的DateTimeOffset值

添加前言:当您解析像"0001-01-01T00:00:00"这样没有时区线索的字符串时,当您的机器的本地时区位于东半球(在UTC之前)时,底层的UTC值将位于0001年之前的某个年份,这是不支持的。您将得到一条异常消息:

UTC表示的日期不在1-9999年范围内。


如果你没有说明你想要什么,很难回答。一种可能是:

set { Remind = DateTimeOffset.Parse(value, null, DateTimeStyles.AssumeUniversal)); }

当字符串值没有给出时区信息时,这将改变假定的时区。

另一个选项是:

set
{
  DateTimeOffset remind;
  DateTimeOffset.TryParse(value, out remind);
  Remind = remind;
}

当解析失败时,它将"回落"到default(DateTimeOffset)

您是否需要某种"往返",以便由get访问器产生的字符串可以返回set访问器?在这种情况下,也许你应该改变格式"yyyy-MM-ddTHH:mm:ss"在getter包括时区信息?


评论后添加:如果你不想丢失信息,我认为你应该使用Remind.ToString("o")标准格式字符串"o"用于往返(不丢失信息)。