¿Hay de todos modos que pueda convertir una zona horaria "Australia/Melbourne" en algún objeto de biblioteca de clases base de .NET?
Pregunta
Tengo algunos datos de un tercero que incluye algunos string Language
datos de propiedad. Algunos datos de muestra recuperados se ven como:
"Australia/Melbourne"
Cuando investigué en lo que se basaba el tipo de datos de la propiedad, es un Información de zona (base de datos TZ / OLSON). ¿Que demonios es eso? Busqué en Google y aquí está la información ...
Parece que es utilizado por muchas plataformas importantes ... pero no .NET.
Entonces, antes de reinventar la rueda (o, más al punto, actualizar el código de ese sitio de CodePlex para incrustar la lista de DB en la DLL), ¿esto ya existe en la biblioteca de clases base de .NET?
Solución
Es una información de zona (base de datos TZ / base de datos OLSON). ¿Que demonios es eso?
Es el portátil, más o menos estándar forma de representar zonas horarias. Es una pena que .NET no lo admita correctamente, en mi opinión.
¿Estás usando .NET 3.5? Si es así, el TimeZoneInfo
La clase es el mejor soporte que tenemos, pero la conversión del nombre de Olson al nombre de Windows puede ser complicado. Idealmente, desea una conversión de Olson ID a la identificación que usa Windows ... Sin embargo, no sé si hay una disponible.
Editar: después de un poco de excavación, un par de enlaces:
- los Proyecto Chronos tiene archivos de mapeo entre ID de Win32 y IDS Olson (Html, Texto)
- El sitio web de Unicode tiene un archivo de asignación similar
No sé con qué frecuencia se mantienen actualizados, pero pueden ser su mejor opción.
Otros consejos
Hay una gran biblioteca de .NET en el proyecto de código que hace exactamente lo que necesita:
http://www.codeproject.com/kb/locale/zoneinfo_dotnet_api.aspx
Utilizo esto en varios proyectos que hablan con las API de Google, ya que todas sus zonas horarias están en formato de base de datos ZoneInfo/Olsen.
También escribí una publicación de blog sobre cómo configurarlo: http://www.diariofaninja.com/blog/2011/05/27/how-to-use-zoneinfotz time-zones-innet-applications
convertirlo a GMT? Busque el +x hrs o -x hrs y luego reste el desplazamiento desde la fecha/hora que ha almacenado. p.ej. En su ejemplo, reste 10, ya que Melbourne es +10 GMT?