Ho uno scenario in cui ho uno sfasamento del fuso orario (in minuti) e ho bisogno di determinare il fuso orario per esso. So che tutti i dati non sono disponibili (ad esempio, potrebbero esserci diversi fusi orari con un offset di -240 minuti) ma una "ipotesi migliore" è accettabile.Come posso determinare un fuso orario in base all'offset UTC?
mio primo passaggio si presentava così:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Questa sorta funziona, ma ho bisogno di spiegare legale che mi sta gettando via un po '. Ho aggiunto questa terribile mod:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
var extra = info.IsDaylightSavingTime(DateTime.Now) ? 60 : 0;
if (info.BaseUtcOffset.TotalMinutes + extra == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Questo funziona "abbastanza bene" nel senso che posso mostrare all'utente il momento giusto per loro quando l'ora legale non è a tutti gli effetti e sono circa il 70% corretto durante l'ora legale. Comunque ... questo è un codice terribile per i miei occhi.
C'è un modo migliore per farlo? Più eleganza sarebbe buona, e più precisione sarebbe ancora meglio.
Aggiornamento
Tecnicamente ho accesso a tutte le informazioni Javascript può ottenere per quanto riguarda la data. Ho una pagina in cui ho inserito un campo nascosto chiamato "offset". Ho una funzione JQuery che popola il campo offset con DateTime(). GetTimezoneOffset(). Mentre non vedo nulla sull'oggetto DateTime che possa essere d'aiuto, forse questo aprirà altre strade per le idee.
@Sailing Judo: ho aggiunto del codice alla mia risposta, che consente a Javascript di convertire un timestamp universale in uno locale. – Kip