【发布时间】:2013-10-25 11:13:36
【问题描述】:
我正在序列化一个DateTime 值,它工作正常,创建了一个ISODateTime 值。但它总是使用 UTC 进行序列化。
YYY-MM-DDThh:mm:ss+hh:mm:ss
当我创建DateTime 实例时,我强制LocalTime:
DateTime localDateTime = new DateTime(DateTime.Now.Ticks,DateTimeKind.Local);
但是,由于某种原因,它总是序列化为 UTC(最后我总是得到“+01:00”)。它应该自动读取 get DataTimeKind 并正确序列化,但没有...... :(
如何配置序列化程序或属性以强制DateTime 在本地时间序列化?
编辑:这是一个测试类
[Serializable]
public class DateTimeTest
{
[System.Xml.Serialization.XmlElement("DateTime")]
public DateTime dateTime;
}
这是序列化代码
public static string XMLSerializeToString<ObjectType>(ObjectType objetToSerialize, string defaultNamespace)
{
TextWriter stringWriter = new StringWriter();
XmlSerializer serializer =
defaultNamespace==null ? new XmlSerializer(typeof(ObjectType)) : new XmlSerializer(typeof(ObjectType),defaultNamespace);
serializer.Serialize(xmlWriter, objetToSerialize);
return stringWriter.ToString();
}
这是调用序列化程序
DateTime localDateTime = new DateTime(DateTime.Now.Ticks, DateTimeKind.Local);
DateTimeTest dateTimeTest = new DateTimeTest();
dateTimeTest.dateTime = localDateTime;
string ser = XMLProcessor.XMLSerializeToString<DateTimeTest>(dateTimeTest, null);
这是结果字符串
<?xml version="1.0" encoding="utf-16"?>
<DateTimeTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DateTime>2013-10-25T17:01:35.7228+01:00</DateTime>
</DateTimeTest>
我不想得到 17:01:35+01:00。我想得到 17:01:35。我怎样才能得到它?
谢谢:)
【问题讨论】:
-
您还没有说明您使用的是什么序列化程序,但如果您不想看到时区偏移量,可以尝试将其 Kind 设置为 DateTimeKind.Unspecified。
-
序列化是什么意思?调用
ToString方法? -
+01:00表示该值不是 UTC,否则它将是Z。这是您的本地时间相对于 UTC 的偏移量。所以我不明白你的问题。你也没有描述你如何序列化它。 -
顺便说一句。
DateTime.Now已经返回了本地DateTime值,因此您构造日期的怪异方式对大多数日期没有任何影响,但是当由于 DST 切换而导致本地时间不明确时会导致错误。 -
为了记录,您可以更改
DateTime类型,而无需使用Ticks。使用DateTime.Now时,您绝对不需要将类型更改为本地(正如 CodesInChaos 提到的那样,它已经是本地的)。要更改DateTime的日期类型,请使用DateTime.SpecifyKind方法。
标签: c# datetime serialization