Cambiar la TimeZone por defecto de una Azure Function
Por defecto, en una Azure Function el Default TimeZone es UTC.
Si vamos a la consola de registros de nuestras Azure Functions, observaremos que la fecha/hora que sale publicada es UTC, pero si creamos una Azure Function de tipo HTTP trigger en C# por ejemplo, y añadimos a la Azure Function el código:
log.Info($»{DateTime.UtcNow} – {DateTime.Now}»);
Y la ejecutamos para observar lo que aparece en la consola de registros, veremos que tanto UtcNow como Now es la misma fecha/hora, UTC en ambos casos.
Podemos no obstante confirmar esto de una forma más simple aún.
Si acudimos a las características de nuestra Azure Function App y seleccionamos la Consola:
Podemos escribir dentro de la consola: time
Nos aparecerá la fecha/hora del sistema.
Ahora bien, que la fecha/hora de registro sea UTC es lógico y correcto.
Pero, ¿cómo podríamos hacer para que la fecha/hora de uso dentro de la aplicación sea la que a lo mejor consideráramos adecuada para nuestra aplicación de acuerdo a nuestro negocio o necesidades?.
Existe una forma de ajustar la fecha/hora de nuestras Azure Web Apps y que es reutilizable a nuestras Azure Functions.
Esta reside en indicar en la Configuración de la aplicación una clave, valor que indique el cambio.
La clave debe ser WEBSITE_TIME_ZONE
Y el valor, un identificador de TimeZone válido.
Para obtener un listado de los TimeZone válidos te sugiero ejecutar el siguiente código en una aplicación de consola por ejemplo:
var timeZones = System.TimeZoneInfo.GetSystemTimeZones().Select(x => new { x.BaseUtcOffset, x.Id}).ToList();
El campo Id es el que nos interesa.
En mi caso para Madrid (España) he elegido Romance Standard Time.
Por lo tanto, debo añadir a la Configuración de aplicación algo parecido a:
Una vez hecho, no te olvides de guardar los cambios dentro de la configuración de nuestra Azure Function App.
Tampoco te olvides que este cambio afectará a todas las Azure Functions de nuestra Azure Function App.
Una vez aplicado el cambio, vamos a abrir la Consola otra vez y a volver a escribir: time
Ahora deberíamos tener algo parecido a lo siguiente:
Y si ejecutamos nuestra Azure Function ahora, veremos que la fecha UtcNow y Now son ahora diferentes.
La primera como UTC (lógicamente) y la segunda de acuerdo al TimeZone indicado, en este caso la hora de Madrid (España).
Como vemos, es muy fácil aplicar el cambio.
Habrá quién afirme que hacerlo de este modo no es lo más recomendable, pero lo cierto es que nos puede sacar de un problema de forma sencilla y rápida.
Happy Coding!
2 Responsesso far
Gracias Jorge, me ha solucionado un susto que tenia con que siempre me daba una hora de menos cuando lo guardaba en SQL Server en Azure y desde una aplicacion Xamarin.
Me estaba volviendo loco!! Pensando por que, como sabes, en Azure, la hora del Sql Database es la UTC y pensaba que no se podia solucionar. Y encontre tu solucion.
Gracias
Hola Jorge, queria preguntarte. Sabes que llamada mediante HTTPClient puedo hacer para que me devuelva los valores de una variable de entorno, como esta?
Al hacer las llamadas a funciones desde Xamarin, me da null, por que la llamada tengo que hacerla contra el App Service.
Por cual llamada HttpCliente / Json, transformo GetEnvironmentVariable(«EMAIL»)??
Gracias por la ayuda!