2010-05-30 27 views
3

我正在开发在位于中央时区的系统上执行的C#.Net应用程序。应用程序使用它们提供的API从第三方获取信息。我已经使用WSDL生成我的应用程序访问该API的代码...他们的报告API允许您为报告定义开始日期和结束日期。这些是C#DateTime字段和XSD:dateTime。现在,当我设置开始日期和结束日期并允许API创建SOAP消息时,日期并不总是包含时区,除非我使用ToLocalTime方法设置日期字段;但是,该方法将在中央时区(CST)中创建日期时间字段,但我需要让它在太平洋时区(PST)中创建这些字段。如果我将我的机器时间设置为PST,那么一切都很好......但当然这会导致其他时间问题。我可以使用什么方法来控制DateTime的格式?或者,是否有可以在C#中设置的应用程序设置,允许时区控制?如何控制System.Xml.Serialization中或应用程序执行期间的时区格式?

+0

您是否曾经找到过解决方案? – 2011-01-28 01:44:03

+0

对ToLocalTime方法投票赞成将时区序列化为SOAP消息。保存了我的一天...更像一周。 – 2013-09-23 01:35:45

回答

0

我想你可以通过使用System.TimeZoneInfo来实现这一点。例如:

TimeZoneInfo.ConvertTime(myLocalTime, TimeZoneInfo.FindSystemTimeZoneById(“Pacific Standard Time”)); 
+0

尝试对WSDL生成的类的日期时间字段进行赋值时发生此问题的变化---我必须记录SOAP消息才能查看发送的内容......唯一的情况是时区是在使用ToLocalTime方法时 - 使用应用程序正在执行的机器的时区。 – Beal 2010-05-30 22:30:42

0

我想你有两个选择。显然你可以做什么取决于目标系统如何处理它接收的日期时间。

1-将日期时间转换为目标时区并发送没有时区信息的请求。这将假定目标系统将接受没有时区信息的日期时间作为PST时区。

2-更改为使用DateTimeOffset。这将允许您明确指定时区偏移量,并将与您指定的时区信息一起序列化。

如果可能,我会选择2.

+0

我也试过DateTimeOffset,我真的很喜欢...但WSDL生成的类有数据元素类型为DateTime ....我永远不会得到使用DateTimeOffset的变体有时区....是你暗示我修改了由WSDL生成的类? – Beal 2010-05-30 22:34:18

+0

@Beal,我想你需要改变生成的类,我意识到这是可怕的做法,我个人会尽量避免它。但至少试着去看看它是否有效,那么如果我们在正确的轨道上,我们可以看到是否有更好的方法来处理这个问题。 – 2010-05-31 17:44:19

+0

试图修改生成的类...这会导致与提供程序(雅虎EWS)的错误...试图找出另一个替代方案.... – Beal 2010-06-07 19:46:13

相关问题