强制本地DateTime序列化

时间:2013-10-25 11:13:37

标签: c# datetime serialization

我正在序列化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();
    }

这是callin'序列化器

    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。我怎么能得到它?

谢谢:)

1 个答案:

答案 0 :(得分:2)

正如我在评论中所说:

  

您还没有说过您正在使用的序列化程序,但如果您不想查看时区偏移量,可以尝试将其设置为DateTimeKind.Unspecified。

您设置DateTime的代码:

DateTime localDateTime = new DateTime(DateTime.Now.Ticks, DateTimeKind.Local);

是不必要的笨拙,完全等同于:

DateTime localDateTime = DateTime.Now;

如果你想要一个没有偏移量的序列化日期时间,它需要有DateTimeKind.Unspecified:

DateTime localDateTime = DateTime.Now.SpecifyKind(DateTimeKind.Unspecified);