转换时间从不同的时区与夏令时包括

本文关键字:时区 夏令时 包括 时间 转换 | 更新日期: 2023-09-27 18:06:15

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

示例代码:

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对象处理该场景,我需要做任何具体的事情吗?

转换时间从不同的时区与夏令时包括

你会没事的。

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

你是有什么特别的问题还是只是想确认一下?

From 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'属性。在你的情况下,它必须是"未指定"。查看"备注"部分

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

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