6

我有一个过程,它接受带有时区的日期时间值作为字符串(数据来自外部系统)。我需要将此日期时间转换为本地机器时区的时间。

示例代码:

string cetId = "Central European Standard Time";
if (timeZone == "CET")
{
    TimeZoneInfo cetZone = TimeZoneInfo.FindSystemTimeZoneById(cetId);
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cetZone, TimeZoneInfo.Local);
}
else if (timeZone == "CEST")
{
    TimeZoneInfo cestZone = TimeZoneInfo.FindSystemTimeZoneById(cetId);
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cestZone, TimeZoneInfo.Local);
}

如果时间是 CEST(中欧夏令时间)而不是 CET(中欧时间)或者 .net TimeZoneInfo 对象是否处理这种情况,我是否需要做任何具体的事情?

4

3 回答 3

1

你应该没事。

您正在告诉 ConvertTime 两个时区(源和目标)是什么。

您对此有具体问题还是只是要求确认?

于 2013-03-28T17:25:00.900 回答
0

TimeZoneInfo.ConvertTime()

The value of the Kind property of the dateTime parameter must correspond to the sourceTimeZone parameter, as the following table shows.

只想补充一点,您需要注意 StatusDateTime 的“Kind”属性。在您的情况下,它必须是“未指定”。查看“备注”部分

于 2013-03-28T17:46:45.457 回答
0

不久前我创建了一个库来封装这些类型的转换:

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/UtcTimeZone.cs

可能对您有用,或者您可能只想选择它来仔细检查您的代码。它封装的其中一件事是@Brian 的警告-因此它具有与 .Kind 属性相关的显式方法名称,如果 .Kind 错误,则会引发有用的异常。获得有用的/常见的/日光时间名称和缩写也需要一些繁重的工作:

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/TimeZoneShortNameMap.cs

于 2013-03-28T18:54:37.173 回答