C# 日期时间从WebLogic SOAP服务更改为WCF应用程序
我来自智利,时区目前设置为GMT-3:00。我的平台配置了以下时区设置: Oracle数据库:GMT-3:00 WebLogic服务器:格林尼治标准时间-3:00 Windows 7客户端:格林尼治标准时间-3:00 执行此查询时,我得到了奇怪的结果: 第一次查询:日期=26/03/08 06:10:00000000000 第二次查询:日期=24/05/13 18:48:00000000000 我可以看到(通过SOAP UI)WebLogic返回以下结果:C# 日期时间从WebLogic SOAP服务更改为WCF应用程序,c#,wpf,datetime,timezone,weblogic,C#,Wpf,Datetime,Timezone,Weblogic,我来自智利,时区目前设置为GMT-3:00。我的平台配置了以下时区设置: Oracle数据库:GMT-3:00 WebLogic服务器:格林尼治标准时间-3:00 Windows 7客户端:格林尼治标准时间-3:00 执行此查询时,我得到了奇怪的结果: 第一次查询:日期=26/03/08 06:10:00000000000 第二次查询:日期=24/05/13 18:48:00000000000 我可以看到(通过SOAP UI)WebLogic返回以下结果: <S:Envelope xml
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:fobpgGestacionesPorFichaResponse xmlns:ns2="http://nucleo.alemana.cl/">
<fobpgGestacionesPorFichaResult>
<gestaciones>
<controles>7</controles>
<esGestaTerminada>1</esGestaTerminada>
<fechaPrimerControl>2007-10-05T00:00:00-03:00</fechaPrimerControl>
<fechaTermino>2008-03-26T06:10:00-03:00</fechaTermino>
..............^ date #1 is here
<fur>2007-08-05T00:00:00-03:00</fur>
<furOp>2007-08-05T00:00:00-03:00</furOp>
<gesdaFechaCreacion>2015-08-19T14:58:41.903-03:00</gesdaFechaCreacion>
<gesnuIdGesta>45087</gesnuIdGesta>
<gesnuNroGesta>1</gesnuNroGesta>
<rnMayorPeso>0</rnMayorPeso>
</gestaciones>
<gestaciones>
<controles>12</controles>
<esGestaTerminada>1</esGestaTerminada>
<fechaPrimerControl>2012-10-11T00:00:00-03:00</fechaPrimerControl>
<fechaTermino>2013-05-24T18:48:00-03:00</fechaTermino>
..............^ date #2 is here
<fur>2012-08-27T00:00:00-03:00</fur>
<furOp>2012-08-27T00:00:00-03:00</furOp>
<gesdaFechaCreacion>2015-08-19T14:58:28.071-03:00</gesdaFechaCreacion>
<gesnuIdGesta>45086</gesnuIdGesta>
<gesnuNroGesta>2</gesnuNroGesta>
<rnMayorPeso>1980</rnMayorPeso>
</gestaciones>
</fobpgGestacionesPorFichaResult>
</ns2:fobpgGestacionesPorFichaResponse>
</S:Body>
</S:Envelope>
7.
1.
2007-10-05T00:00:00-03:00
2008-03-26T06:10:00-03:00
日期在这里
2007-08-05T00:00:00-03:00
2007-08-05T00:00:00-03:00
2015-08-19T14:58:41.903-03:00
45087
1.
0
12
1.
2012-10-11T00:00:00-03:00
2013-05-24T18:48:00-03:00
日期在这里
2012-08-27T00:00:00-03:00
2012-08-27T00:00:00-03:00
2015-08-19T14:58:28.071-03:00
45086
2.
1980
但是,当我的客户端WPF应用程序连接到WebLogic服务并检索上述数据时,我会得到这些值(在调试模式下):
第一次日期回复
这比我预期的(6:10)提前了一个小时(7:10)
第二次日期回复
这是意料之中的(18:48)
我不知道这里发生了什么。为什么这些结果不一致?我以前有过这个问题,它真的让我困惑。NET根据计算机的时区配置序列化/反序列化XML时,会自动更改
DateTime
值。NET试图提供帮助,但这不是预期的行为,因此往往会引起很多混乱
在任何应用程序中处理DateTime
的最佳方法是存储UTC日期时间,然后在客户端上以本地格式显示它们
但是,一个不涉及将所有日期时间转换为UTC的更快的解决方案是:
尝试更改DateTime
s,以便DateTimeKind
未指定,XML序列化程序将不会尝试转换它们。例如,此代码将日期转换为DateTimeKind.Unspecified
:
DateTime newDate = DateTime.SpecifyKind(oldDate, DateTimeKind.Unspecified);
有关详细信息,请参阅上的Microsoft指南。嗨,F.Rojas,我编辑了您的问题,以清理语法和格式。如果你觉得我改变了你问题的意思,请回过头来。欢迎来到堆栈溢出!SOAP响应看起来是正确的。您是否可以反序列化为
DateTimeOffset
而不是DateTime
,并检查它认为有哪些时区数据?我在ServiceReference setter中更改System.DateTimeOffset的System.DateTime。所有日期的返回数据如下:01-01-0001 0:00:00+00:00直截了当的猜测:它是否与夏令时有关?2008年,智利的DST一直持续到3月29日。如果您有可能将日期快进,例如4月1日,并查看问题是否仍然存在。是的,从2008年3月26日更改为2008年3月30日时,日期显示正确,这是导致此问题的原因?谢谢