C# 日期时间c的问题#

C# 日期时间c的问题#,c#,timezone,utc,C#,Timezone,Utc,在我的工作中,我创建了一个用于Outlook的表单(它将是一个插件)。在我的表单中,用户可以选择会议日期和时间。用户填写表单后,将发送消息。然后我的问题开始了 例如:即使我在表单中选择下午1:30,发送给其他用户的消息也会显示会议将在下午3:30开始。 为了创建插件,我必须使用TMS。 API文档说明我需要使用UTC时间。 在我的国家,UTC是UTC+1,现在我们处理的是夏季,所以我们有GMT+2。 我的问题是,在消息中,会议时间相对于表单中指示的会议时间为+2小时 我的代码是: TimeZon

在我的工作中,我创建了一个用于Outlook的表单(它将是一个插件)。在我的表单中,用户可以选择会议日期和时间。用户填写表单后,将发送消息。然后我的问题开始了

例如:即使我在表单中选择下午1:30,发送给其他用户的消息也会显示会议将在下午3:30开始。 为了创建插件,我必须使用TMS。 API文档说明我需要使用UTC时间。 在我的国家,UTC是UTC+1,现在我们处理的是夏季,所以我们有GMT+2。 我的问题是,在消息中,会议时间相对于表单中指示的会议时间为+2小时

我的代码是:

TimeZoneInfo timeZoneInfo;
DateTime dateTime;

timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now.AddHours(-2), timeZoneInfo);

string sessionID = "";
string startTime = "";
string endTime = "";

dateTime = dateTimePicker3.Value;

x_workers api = new x_workers();
yworker gui = new xworker();
sessionID = gui.generateSessionId();

startTime = dateTimePicker.Value.Date.ToString("yyyy'-'MM'-'dd") +" "+ dateTime.ToString("HH':'mm':'ss'Z'");
endTime = dateTimePicker2.Value.Date.ToString("yyyy'-'MM'-'dd") + " " + dateTimePicker4.Value.ToString("HH':'mm':'ss'Z'");
我还尝试:

string sessionID = "";
string startTime = "";
string endTime = "";

api_workers api = new api_workers();
guiWorkers gui = new guiWorkers();
sessionID = gui.generateSessionId();

startTime = dateTimePicker1.Value.Date.ToString("yyyy'-'MM'-'dd") +" "+ dateTimePicker3.Value.ToString("HH':'mm':'ss'Z'");
endTime = dateTimePicker2.Value.Date.ToString("yyyy'-'MM'-'dd") + " " + dateTimePicker4.Value.ToString("HH':'mm':'ss'Z'");
我还有第二个选择,我只有额外的1小时


我该怎么办?

Carl279我尝试了您的解决方案,但在我的情况下,它不起作用,但感谢您的帮助。每个
DateTime
值都带有一个
.Kind
属性,您可以检查。您可以使用简单的实例方法
.ToUniversalTime()
.ToLocalTime()
创建另一种
DateTime
值。然后,您可以继续调用
.ToString(format)
。实际时区未编码在
DateTime
值中。“本地”的解释是机器操作系统使用的时区。Hi。请阅读。您的示例并不完整,因为我们不知道您的
dateTimePicker/1/2/3/4
控件是什么,也不知道从中产生的值。此外,您还有许多与您的问题无关的其他项目(api、gui、会话等)。此外,请注意,在第一个示例中,您正在将
dateTime
重新指定给选择器的值,因此之前分配给它的任何内容都将丢失,因此与输出无关。此外,请注意,通过在字符串中附加
Z
文本,您可以断言这些是UTC时间。你说的“在我的国家,UTC是UTC+1”是毫无意义的,因为UTC总是UTC。另外,你说了一些关于“TMS”的事情,但不清楚这到底是什么。也许你需要做的是在发布表单之前将本地时间转换为UTC?参见Carl279我尝试了您的解决方案,但在我的情况下,它不起作用,但感谢您的帮助。每个
DateTime
值都带有一个
.Kind
属性,您可以检查它。您可以使用简单的实例方法
.ToUniversalTime()
.ToLocalTime()
创建另一种
DateTime
值。然后,您可以继续调用
.ToString(format)
。实际时区未编码在
DateTime
值中。“本地”的解释是机器操作系统使用的时区。Hi。请阅读。您的示例并不完整,因为我们不知道您的
dateTimePicker/1/2/3/4
控件是什么,也不知道从中产生的值。此外,您还有许多与您的问题无关的其他项目(api、gui、会话等)。此外,请注意,在第一个示例中,您正在将
dateTime
重新指定给选择器的值,因此之前分配给它的任何内容都将丢失,因此与输出无关。此外,请注意,通过在字符串中附加
Z
文本,您可以断言这些是UTC时间。你说的“在我的国家,UTC是UTC+1”是毫无意义的,因为UTC总是UTC。另外,你说了一些关于“TMS”的事情,但不清楚这到底是什么。也许你需要做的是在发布表单之前将本地时间转换为UTC?看见