DateTime en sí mismo no contiene información de zona horaria real. Es puede saber si es UTC o local, pero no lo que realmente significa local.
DateTimeOffset es algo mejor, eso es básicamente una hora UTC y un desplazamiento. Sin embargo, eso aún no es suficiente para determinar la zona horaria, ya que muchas zonas horarias diferentes pueden tener la misma compensación en cualquier punto en el tiempo. Sin embargo, esto parece ser lo suficientemente bueno para usted, ya que todo lo que tiene que trabajar al analizar la fecha/hora es el desplazamiento.
El soporte para zonas horarias desde .NET 3.5 es mucho mejor de lo que era, pero realmente me gustaría ver un "ZonedDateTime" estándar o algo así, una hora UTC y una zona horaria real. Es fácil crear uno propio, pero sería bueno verlo en las bibliotecas estándar.
EDITAR: Casi cuatro años después, ahora sugiero usar Noda Time que tiene un conjunto bastante más rico de tipos de fecha/hora. Sin embargo, soy parcial, ya que el autor principal de Noda Time :)
El PublicDomain projhect en CodePlex hace esto por usted. – Cheeso
Una TimeZone enum en el BCL sería agradable si las zonas horarias mundiales son estáticas y no cambian. – jlafay
@jlafay: Sin embargo, sí cambian: se agregaron más zonas horarias a Windows el año pasado, por ejemplo. –