Ora legale/Solare in Power Automate
Può capitare di dover copiare degli appuntamenti, da una lista SharePoint Online, nelle settimane successive, mantenendo lo stesso orario.
Questo funziona senza problemi, basta prendere la data dell'appuntamento originale e sommare (addDays) X giorni da aggiungere:
La cosa si complica se l'appuntamento di destinazione si trova a cavallo di un cambio ora solare/legale (daylight saving time).
L'esempio corrisponde a questo Power Automate
A questo punto si può ricavare la differenza tra le variabili varEndDateLocal e varStartDateLocal per determinare l'offset, in minuti, da applicare alla data varEndDateUTC.
Ma prima, la parte della data va uniformata, in modo da poter calcolare solo la differenza orariail corrispondente Power Automate è questo
Nella variabile varEndDateUTCCorrect c'è la data corretta da scrivere sulla lista SharePoint Online.
Nella variabile varEndDateUTC c'è la data corretta da scrivere sulla lista SharePoint Online.
Questo funziona senza problemi, basta prendere la data dell'appuntamento originale e sommare (addDays) X giorni da aggiungere:
Power Automate
addDays('2023-03-30T15:00:00Z', 14)
La cosa si complica se l'appuntamento di destinazione si trova a cavallo di un cambio ora solare/legale (daylight saving time).
Soluzione 1
In questo esempio di Power Automate si può vedere come una data del 30 marzo 2024 alle ore 16:00 italiane, corrisponde alle 15:00 UTC.Se alla stessa data, si sommano 10 giorni, supero la data di cambio ora legale a solare, lo stesso appuntamento corrisponderebbe alle ore 17:00 ora italiana, quindi un ora dopo del voluto.L'esempio corrisponde a questo Power Automate
Power Automate
varStartDateLocal = convertFromUtc(variables('varStartDateUTC'),variables('varTimeZoneLocal'))
varEndDateUTC = addDays(variables('varStartDateUTC'), 10)
varEndDateLocal = convertFromUtc(variables('varEndDateUTC'),variables('varTimeZoneLocal'))
A questo punto si può ricavare la differenza tra le variabili varEndDateLocal e varStartDateLocal per determinare l'offset, in minuti, da applicare alla data varEndDateUTC.
Ma prima, la parte della data va uniformata, in modo da poter calcolare solo la differenza orariail corrispondente Power Automate è questo
Power Automate
varStartDateLocalFixedDate = concat('2024-04-03T',formatDateTime(variables('varStartDateLocal'), 'HH:mm:ss'), 'Z')
varEndDateLocalFixedDate = concat('2024-04-03T',formatDateTime(variables('varEndDateLocal'), 'HH:mm:ss'), 'Z')
varEndDateOffsetMinutes = div(sub(ticks(variables('varStartDateLocalFixedDate')),ticks(variables('varEndDateLocalFixedDate'))),600000000)
varEndDateUTCCorrect = addMinutes(variables('varEndDateUTC'), variables('varEndDateOffsetMinutes'))
Soluzione 2
Questa soluzione è ancora più semplice, prevede di fare la somma dei giorni sulla data, dopo averla convertita nella time zone locale, e poi riconvertirla in UTC prima di salvarla.il corrispondente Power Automate è questoPower Automate
varStartDateLocal = convertFromUtc(variables('varStartDateUTC'),variables('varTimeZoneLocal'))
varEndDateLocal = addDays(variables('varStartDateLocal'), 10)
varEndDateUTC = convertToUtc(variables('varEndDateLocal'), variables('varTimeZoneLocal'))