使用 C#,我需要将传入的日期时间值转换为 UTC。我知道 .NET 中有用于这些转换的功能,但我必须在标准时区列表中识别时区。
在 .NET 中执行此操作的最佳方法是什么?我是否需要创建一个映射表来将时区转换为
TimeZoneInfo.GetSystemTimeZones()
中的 ID(例如“太平洋标准时间(墨西哥)”)
这样我就可以使用
TimeZoneInfo.FindSystemTimeZoneById()
?
我之前已经通过使用映射表将时区 ID 存储在数据库中来完成此操作。即包含
TimeZone.GetSystemTimeZones()
结果的表格
您实际上并不需要使用
TimeZoneInfo.FindSystemTimeZoneById()
:您可以使用 TimeZoneInfo.ConvertTimeBySystemTimeZoneId()
的重载之一进行转换。此方法有一些采用 DateTime 值的重载,以及一些采用 DateTimeOffset 值的重载(这是更可取的,因为它们指定了明确的时间点)。
例如
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "New Zealand Standard Time", "UTC")
使用系统时区 ID 而不是存储在数据库中的偏移量的真正好处是,夏令时由
TimeZoneInfo.ConvertTimeBySystemTimeZoneId
自动为您处理。
MSDN 上有很多关于转换到不同时区的信息。
您可能想使用 ConvertTimeBySystemTimeZoneId 方法(请点击链接查看示例)。