Come posso determinare se una determinata data è in ora legale per un determinato fuso orario in .NET 2.0?
-
09-06-2019 - |
Domanda
Sono su .NET 2.0, in esecuzione con attendibilità media (quindi Informazioni sul fuso orario e del Registro non sono ammesse opzioni).Chiedo all'utente due date e un fuso orario e mi piacerebbe davvero poter determinare automaticamente se è necessario regolare il fuso orario per l'ora legale.
Questo probabilmente non è nemmeno uno scenario valido a meno che non ne abbia alcuni molto supporto robusto, a la Informazioni sul fuso orario, in primo luogo per distinguere tra tutte le diverse varietà di fusi orari.
Soluzione
In .NET 2.0 devi codificarlo tu stesso.Si tratta di ricercare le leggi sull'ora legale in varie regioni e di integrarle nelle proprie strutture dati.Il problema è in qualche modo semplificato se ti interessa solo un sottoinsieme di fusi orari, ad esempio solo negli Stati Uniti, ma se hai bisogno di tutti i fusi orari globali, hai molto lavoro da fare, e quindi il codice deve essere aggiornato ogni pochi anni quando le leggi cambiano.Anche i nuovi oggetti del fuso orario nell'ultima versione di .NET richiederanno aggiornamenti di Windows per mantenerli corretti man mano che le leggi cambiano.
Altri suggerimenti
IL Banca dati TZ è un database di dominio pubblico delle regole del fuso orario molto ben mantenuto.Esiste anche un formato compilato per i dati forniti e sono disponibili molte librerie per leggere i dati compilati, come questa: ZoneInfo (database tz/database Olson) API .NET
Eccellente libreria di fusi orari qui: TZ4Net
Bene, da allora TimeZoneInfo
è escluso, probabilmente non troverai una soluzione nel framework stesso (ma non citarmi su questo).
In tal caso, hai considerato di riflettere il TimeZoneInfo
classe e usando quello che trovi lì?
@Domenico, ho preso in considerazione, ma preferirei rimanere legale, e sono abbastanza sicuro che le informazioni dovrebbero comunque essere incorporate nel framework o prelevate dal registro in qualche modo subdolo che non richiede autorizzazioni.. .