转换时间从不同的时区与夏令时包括
本文关键字:时区 夏令时 包括 时间 转换 | 更新日期: 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