Nello script di settimana scorsa abbiamo visto come le estensioni della Universal Windows Platform ci permettano di fare il riavvio di un device IoT facendo target su quella specifica piattaforma. Una volta che il device è stato correttamente riavviato, una delle prime operazioni che dovremo fare per riportarlo ad uno stato consistente sarà quella di aggiornare il timezone del device stesso così che venga sincronizzato, magari lato server.
Come visto nello script precedente, dobbiamo prima di tutto aggiungere l'estensione Windows IoT Extensions for the UWP all'applicazione e includere la capability systemManagement nel file di manifest, quindi possiamo sfruttare la classe TimeZoneSettings per applicare il timzeone corrente:
private async Task ApplyTimeZoneAsync() { if (TimeZoneSettings.CanChangeTimeZone) { var status = await TimeZoneSettings.AutoUpdateTimeZoneAsync(TimeSpan.FromSeconds(60)); switch (status) { case AutoUpdateTimeZoneStatus.Failed: case AutoUpdateTimeZoneStatus.TimedOut: // qualcosa è andato storto... break; case AutoUpdateTimeZoneStatus.Attempted: // il tentativo è stato recepito dal device, ma non è detto che // il nuovo timezone sia stato applicato correttamente break; } } }
Nel caso in cui si voglia impostare il timezone su un fuso differente, è sufficiente chiamare l'apposita API:
private void ChangeTimeZone() { if (TimeZoneSettings.CanChangeTimeZone) { // recupero il primo timezone utile var timezoneName = TimeZoneSettings.SupportedTimeZoneDisplayNames.FirstOrDefault(); // imposto il fuso TimeZoneSettings.ChangeTimeZoneByDisplayName(timezoneName); } }
E' sempre importante fare un controllo sulla proprietà CanChangeTimeZone, poiché il metodo che applica il nuovo fuso cercherà di impostarlo seguendo, in quest'ordine, GPS, rete cellulare, Wi-Fi ed indirizzo IP, pertanto, se il device non supporta nessuno di questi meccanismi, potrebbe generare un errore a runtime.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Eseguire query in contemporanea con EF
Potenziare la ricerca su Cosmos DB con Full Text Search
Generare la software bill of material (SBOM) in GitHub
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare WhenEach per processare i risultati di una lista di task
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Eliminare una project wiki di Azure DevOps