TimeZoneconverter es una biblioteca liviana para convertir rápidamente entre los nombres de la zona horaria de IANA, Windows y Rails.
Nota: Un paquete separado TimeZoneConverter.Posix
también está disponible si necesita soporte de zona horaria POSIX.
TimeZoneConverter
a su proyecto.TimeZoneConverter
donde sea necesario. A partir de la versión 6.0.0, TimeZoneconverter funciona con todo lo siguiente:
Las versiones de .NET Framework menos de 4.6.2 ya no son compatibles.
.NET 6 tiene soporte incorporado para las zonas horarias de IANA y Windows de manera multiplataforma, lo que reduce algo la necesidad de esta biblioteca. Se basa en la integración de la UCI de .NET para realizar esta funcionalidad. Vea el blog de .NET para más detalles.
Reestimado, si solo se dirige a .NET 6 (o más alto), y tiene habilitado la UCI proporcionada por la plataforma o de aplicaciones Local, es posible que no necesite usar esta biblioteca. Sin embargo, todavía es compatible, y muchos han encontrado que sigue siendo útil en ciertos entornos o en plataformas específicas.
TimeZoneconverter no tiene dependencias de datos externas en tiempo de ejecución. Todos los datos que necesita está integrado en la biblioteca misma.
Algunas funciones en TimeZoneconverter, como TZConvert.GetTimeZoneInfo
dependen del objeto TimeZoneInfo
subyacente que tenga acceso a los datos de la zona horaria del sistema operativo. En Windows, estos datos provienen del registro y se mantienen a través de actualizaciones de Windows.
En OSX y Linux, estos datos provienen de una distribución de la base de datos de la zona horaria de IANA, generalmente a través del paquete tzdata
. Si su entorno no tiene instalado el paquete tzdata
, deberá instalarlo para TZConvert.GetTimeZoneInfo
para que funcione correctamente.
Por ejemplo, las imágenes Alpine Linux Docker para .NET Core ya no se envían con tzdata
. Consulte Dotnet/Dotnet-Docker#1366 para obtener instrucciones sobre cómo agregarlo a sus imágenes Docker.
Esta biblioteca utiliza una combinación de fuentes de datos para lograr sus objetivos:
MAPPING
de ActiveSupport::TimeZone
en el código fuente de Rails.Por lo general, este último está reservado para casos de borde, y para zonas recientemente introducidas que pueden o no haber sido publicadas en fuentes oficiales todavía.
IMPORTANTE: Dado que estos datos pueden cambiar cada vez que se introducen nuevas zonas horarias de cualquiera de estas fuentes, se recomienda que siempre use la revisión más actual y verifique las actualizaciones regularmente.
Además, esta biblioteca no intenta determinar si las ID de zona horaria proporcionadas están realmente presentes en la computadora donde se ejecuta el código. Se supone que la computadora se mantiene actualizada con las actualizaciones de la zona horaria.
Por ejemplo, si uno intenta convertir Africa/Khartoum
en una ID de zona horaria de Windows, obtendrá Sudan Standard Time
. Si luego se usa en una computadora de Windows que aún no tiene KB4051956
instalada (que creó esta zona horaria), es probable que obtengan un TimeZoneNotFoundException
.
Es posible que una zona sea imposible , lo que significa que no hay un equivalente lógico de un tipo de zona horaria a otra.
Actualmente solo hay una zona IANA que no es impulsable a Windows, que es Antarctica/Troll
. En otras palabras, no hay una zona horaria "correcta" para los usuarios de Windows que pueden estar estacionados en la estación de troll, Antártida. Por lo tanto, si intenta convertir Antarctica/Troll
a Windows, obtendrá una TimeZoneNotFoundException
.
Hay muchas zonas que no son impulsables a los rieles. La lista completa está en el código de prueba unitario aquí.
Convierta un nombre de zona horaria de IANA en la mejor ID de zona horaria de Windows.
string tz = TZConvert . IanaToWindows ( " America/New_York " ) ;
// Result: "Eastern Standard Time"
Convierta un nombre de la zona horaria de Windows al mejor nombre de la zona horaria de IANA.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " ) ;
// result: "America/New_York"
Convierta un nombre de la zona horaria de Windows al mejor nombre de la zona horaria de IANA, con respecto a un país específico.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " , " CA " ) ;
// result: "America/Toronto"
Obtenga un objeto TimeZoneInfo
de .NET Core, independientemente del sistema operativo en el que esté ejecutando:
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;
Convierta un nombre de zona horaria de rieles al mejor nombre de la zona horaria de IANA.
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"
Convierta un nombre de zona horaria de rieles a la mejor ID de zona horaria de Windows.
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"
Convierta un nombre de la zona horaria de IANA en uno o más nombres de la zona horaria de Rails.
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }
Convierta una ID de zona horaria de Windows a uno o más nombres de la zona horaria de Rails.
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
Hay algunos ayudantes adicionales que puede encontrar útiles.
Estas propiedades proporcionan listas de los diversos tipos de zonas horarias conocidas en esta biblioteca:
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
Si necesita una lista de zonas horarias aplicables en una región determinada, puede usar:
TZConvert.GetIanaTimeZoneNamesByTerritory()
Esta biblioteca se proporciona de forma gratuita, bajo los términos de la licencia MIT.