C# 如何在System.Xml.Serialization中或在应用程序执行期间控制时区格式?

C# 如何在System.Xml.Serialization中或在应用程序执行期间控制时区格式?,c#,datetime,xml-serialization,timezone,C#,Datetime,Xml Serialization,Timezone,我正在开发一个C#.Net应用程序,它在位于中央时区的系统上执行。应用程序使用第三方提供的API从第三方获取信息。我已经使用WSDL生成了我的应用程序访问API的代码……它们的报告API允许您定义报告的开始日期和结束日期。这些是C#DateTime字段和XSD:DateTime。现在,当我设置开始日期和结束日期并允许API创建SOAP消息时,除非我使用ToLocalTime方法设置日期字段,否则日期并不总是包含时区;但是,该方法将在中央时区(CST)中创建DateTime字段,但我需要让它在太平

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

我认为您可以通过使用来实现这一点。例如:

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

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

1-将datetime转换为目标时区,并发送不带时区信息的请求。这将假定目标系统将接受一个不包含时区信息的日期时间作为PST时区

2-更改为使用。这将允许您显式指定时区偏移量,并将使用您指定的时区信息进行序列化


如果可能的话,我会选择选项2。

尝试了这种方法的变体。当必须为WSDL生成的类指定日期-时间字段时,就会出现问题——我必须记录SOAP消息以查看发送的内容……唯一存在时区的情况是使用ToLocalTime方法——该方法使用应用程序正在执行的机器。我还尝试了DateTimeOffset,这是我真正喜欢的…但是WSDL生成的类将数据元素类型化为DateTime…我永远无法获得使用DateTimeOffset来获得时区的变体…您是否建议我修改WSDL生成的类?@Beal,我认为您需要更改生成的类,我意识到这是一种糟糕的做法,我个人会尽量避免。但至少要尝试一下,看看它是否有效,然后如果我们在正确的轨道上,我们可以看看是否有更好的方法来处理这个问题。尝试修改生成的类…这会导致提供程序出错(Yahoo EWS)…回到试图找出另一个替代方案的时候…你找到解决方案了吗?投票支持ToLocalTime方法黑客,将时区序列化到SOAP消息中。救了我一天。。。更像是一周。