如何在类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]
现在不是崩溃,但我不知道为什么。这是最好的解决方案吗?
添加前言:当您解析像"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"
用于往返(不丢失信息)。