2010-10-07 22 views
8

Desidero calcolare le differenze orarie correnti tra fuso orario Stati Uniti/Centrale e Ora legale britannica. Voglio dire, attualmente questi due fusi orari hanno l'ora legale in corso, quindi hanno una differenza di tempo di 6 ore. Ma dopo domenica 31 ottobre 2010, l'ora legale sarà disattivata per l'ora legale britannica, e in quel momento ci saranno 5 ore di differenza di orario tra questi due fusi orari.Come ottenere le differenze orarie correnti tra due fusi orari

Esiste un modo per calcolare queste differenze temporali?

+0

Possibile duplicato di [Creazione di un DateTime in un determinato fuso orario in C# fx 3.5] (https://stackoverflow.com/questions/246498/creating-a-datetime-in-a-specific-time-zone-in-c- sharp-fx-3-5) – Liam

risposta

4

È possibile creare due oggetti datetime da diversi fusi orari, un buon esempio: Creating a DateTime in a specific Time Zone in c# fx 3.5

e calcolare il delta tra di loro.

+0

Anche se non ho usato quel metodo esatto, ma dalle tue risposte ho avuto l'idea di base. Ho implementato questa soluzione ed è quasi il 90% simile alla risposta di Jon Skeet. Ma dal momento che la tua risposta mi ha dato l'idea, la seleziono come risposta scelta. Grazie mille :-) –

2

Am ha la risposta corretta che funzionerà principalmente se ci si limita alla data corrente. In generale, a seconda di quanto vuoi essere corretto, può essere piuttosto difficile. Questo perché il DST in un fuso orario a partire da oggi può essere diverso da quello che era nella storia. Forse prima del 01/04/1950 non c'era l'ora legale britannica. O durante le Olimpiadi di Sydney, le date del DST sono state temporaneamente modificate nell'anno 2000. Per tenere conto di tutte queste cose è necessario un database storico di DST/TimeZone.

+0

No, non ho bisogno del database storico di DST/TimeZone, ho calcolato le differenze di tempo in queste due aree e poi l'ho usato per la conversione necessaria, ma grazie per la tua risposta. –

2

La documentazione di TimeZoneInfo.GetUtcOffset ha un esempio che mostra il calcolo dell'offset UTC per vari fusi orari in momenti diversi. Hai solo bisogno di ottenere l'offset UTC al momento specifico di interesse per ciascuno dei tuoi due fusi orari e calcolare la differenza. Vedi:

http://msdn.microsoft.com/en-us/library/bb396378.aspx

21

solo per fornire qualche codice concreto per le risposte date, ecco qualche codice per capire la differenza di corrente tra me (a Londra) ed i miei colleghi a Mountain View:

using System; 

class Test 
{ 
    static void Main() 
    { 
     var london = TimeZoneInfo.FindSystemTimeZoneById 
      ("GMT Standard Time"); 
     var googleplex = TimeZoneInfo.FindSystemTimeZoneById 
      ("Pacific Standard Time"); 

     var now = DateTimeOffset.UtcNow; 
     TimeSpan londonOffset = london.GetUtcOffset(now); 
     TimeSpan googleplexOffset = googleplex.GetUtcOffset(now); 
     TimeSpan difference = londonOffset - googleplexOffset;   
     Console.WriteLine(difference); 
    } 
} 
+0

eccetto Mountain View non è nell'ora standard degli Stati Uniti in montagna :-) – Andrew

+0

@Andrew: non è vero? Questo è il problema con gli ID di Windows invece dei nomi di zoneinfo :(Qual è l'ID giusto in questo caso? Solo "Tempo standard di montagna"? O "Pacific Standard Time"? Modifica a quest'ultimo ... –

+0

scusate, avrei dovuto essere più Nel mio commento, credo che dovrebbe essere il Pacific Standard Time. – Andrew