.NET根据时区将datetime转换为UTC

Bob*_*ler 12 .net c# timezone utc

使用C#,我需要将传入的日期时间值转换为UTC.我知道.NET中有这些转换的功能,但我必须确定时区是标准的时区列表

http://www.timegenie.com/timezones

在.NET中执行此操作的最佳方法是什么?我是否需要创建一个映射表来将时区转换为TimeZoneInfo.GetSystemTimeZones()中的ID(例如"太平洋标准时间(墨西哥)"),以便我可以使用TimeZoneInfo.FindSystemTimeZoneById()?

谢谢你的帮助

Ben*_*thy 17

之前我已经使用映射表将时区id存储在数据库中.即包含结果的表TimeZone.GetSystemTimeZones()

您实际上并不需要使用TimeZoneInfo.FindSystemTimeZoneById():您可以使用其中一个重载进行转换TimeZoneInfo.ConvertTimeBySystemTimeZoneId().此方法有一些重载采用DateTime值,一些采用DateTimeOffset值(这是优选的,因为它们指定一个明确的时间点).

例如

TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "New Zealand Standard Time", "UTC")
Run Code Online (Sandbox Code Playgroud)

使用系统时区id而不是存储在数据库中的偏移量的真正好处是可以自动为您处理夏令时TimeZoneInfo.ConvertTimeBySystemTimeZoneId.

  • +1提及夏令时计算. (2认同)