Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制本地日期时间序列化_C#_Datetime_Serialization - Fatal编程技术网

C# 强制本地日期时间序列化

C# 强制本地日期时间序列化,c#,datetime,serialization,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”)。它应该自动读取getDataTi

我正在序列化一个
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();
    }
公共静态字符串XMLSerializeToString(ObjectType ObjectToSerialize,字符串defaultNamespace)
{
TextWriter stringWriter=新建stringWriter();
XmlSerializer序列化程序=
defaultNamespace==null?新的XmlSerializer(typeof(ObjectType)):新的XmlSerializer(typeof(ObjectType),defaultNamespace);
serializer.Serialize(xmlWriter,objetToSerialize);
返回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);
DateTime localDateTime=newdatetime(DateTime.Now.Ticks,DateTimeKind.Local);
DateTimeTest DateTimeTest=新的DateTimeTest();
dateTimeTest.dateTime=localDateTime;
字符串ser=XMLProcessor.XMLSerializeToString(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>

2013-10-25T17:01:35.7228+01:00
我不想得到17:01:35+01:00。我想得到17:01:35。我怎么能得到它


谢谢:)

正如我在评论中所说:


您尚未说明正在使用的序列化程序,但可以尝试将其种类设置为DateTimeKind。如果不想查看时区偏移,则未指定

设置日期时间的代码:

DateTime localDateTime = new DateTime(DateTime.Now.Ticks, DateTimeKind.Local);
不必要的笨拙,完全等同于:

DateTime localDateTime = DateTime.Now;
如果要序列化没有偏移量的日期时间,则需要具有DateTimeKind。未指定:

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

您尚未说明正在使用的序列化程序,但可以尝试将其种类设置为DateTimeKind。如果不想查看时区偏移量,则未指定。序列化是什么意思?调用
ToString
方法?
+01:00
表示该值不是UTC,否则将是
Z
。它是本地时间相对于UTC的偏移量。所以我不明白你的问题。您也没有描述如何序列化它。顺便说一句<代码>日期时间。现在已经返回了一个本地的
日期时间
值,所以你奇怪的日期构造方式对大多数日期没有任何影响,但是当本地时间由于DST切换而不明确时,会导致错误。作为记录,你可以更改
日期时间
种类,而不必使用
记号
。使用
DateTime.Now
(正如CodesInChaos所提到的,它已经是本地的)时,您绝对不需要将种类更改为本地的。要更改
DateTime
的日期类型,请使用
DateTime.SpecifyKind
方法。它并不完全等效,因为
现在可以返回两种本地日期时间,而OP的代码只返回其中一种。第二种本地日期时间是必需的,以确保即使使用DST开关也能往返UTC。@CodesInChaos-我认为它完全等效-您所说的“两种本地日期时间”是什么意思?自.NET 2.0引入Kind属性以来,DateTime.Now始终返回Kind=Local(当然,DateTime.UtcNow返回Kind=Utc)。
DateTime
仅公开一种
Local
,但在内部存储两种。内部存储的一个用于在DST切换期间消除时间歧义,例如“2:30本地”存在两次。这意味着您可以使用
Kind==Local
获得两个
DateTime
值,它们看起来相同,但转换为UTC时生成的时间不同。