Resolviendo problemas con la zona horario (TimeZone) al desplegar Hangfire en Linux y Windows

Resolviendo problemas con la zona horario (TimeZone) al desplegar Hangfire en Linux y Windows

Azure App Service

Hace unos dias nos toco desplegar el mismo en dos Azure App Service: uno con windows y otro con Linux. La mejor manera de configurar la zona horaria de cada Job es por codigo usando la libreria "TimeZoneConverter".

Les comparto un ejemplo de como se implementaria en el Startup.cs:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IRecurringJobManager recurringJobManager)
    {
      //.....

      recurringJobManager.AddOrUpdate<IPropiedadesProviderJob>(
        "JorgeligJob",
        x => x.DoProcess(null),
        Cron.Daily(6),
        TZConvert.GetTimeZoneInfo("America/Monterrey")
      );

      //.....
    }

Si analizamos el metodo GetTimeZoneInfo vemos que se puede usar de forma indistinta el formato de Windows (Central Standard Time (Mexico)) o de Linux (America/Monterrey)

    /// <summary>
    /// Retrieves a <see cref="T:System.TimeZoneInfo" /> object given a valid Windows or IANA time zone identifier,
    /// regardless of which platform the application is running on.
    /// </summary>
    /// <param name="windowsOrIanaTimeZoneId">A valid Windows or IANA time zone identifier.</param>
    /// <returns>A <see cref="T:System.TimeZoneInfo" /> object.</returns>
    public static TimeZoneInfo GetTimeZoneInfo(string windowsOrIanaTimeZoneId)
    {
      TimeZoneInfo timeZoneInfo;
      if (TZConvert.TryGetTimeZoneInfo(windowsOrIanaTimeZoneId, out timeZoneInfo))
        return timeZoneInfo;
      throw new TimeZoneNotFoundException();
    }