Conversia CST în EST cu ora de vară (Programare, C#, Decalaj De Fus Orar)

AlgoAlpha a intrebat.

Încerc să convertesc un DateTime care este în CST în EST în timp ce se ajustează pentru ora de vară. Mașina mea locală este pe EST.Found acest pe msdn, dar utilizatorul fokasurecommended folosind DateTimeOffset pentru a ajusta pentru DST, dar nu știu cum să încorporez asta în codul meu. mulțumesc pentru orice ajutor. acest lucru este ceea ce am până acum, care funcționează, dar nu cred că se ajustează pentru economii de zi.

        DateTime cstTime, utcTime;
        DateTime estTime;
        string cstZoneId, estZoneId;
        TimeZoneInfo cstZone, estZone;

        estZoneId = "Eastern Standard Time";
        cstZoneId = "Central Standard Time";
        estZone = TimeZoneInfo.FindSystemTimeZoneById(estZoneId);
        cstZone = TimeZoneInfo.FindSystemTimeZoneById(cstZoneId);

        //define d as CST
        cstTime = d;
        try
        {
            //convert CST to UTC
            utcTime = TimeZoneInfo.ConvertTimeToUtc(cstTime, cstZone);
            //convert UTC to EST
            estTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, estZone);
            return estTime;
        }
        catch (Exception e)
        {

            Console.WriteLine(e.Message);
        }

Comentarii

  • Dacă sunteți pe EST sau CST, atunci nu trebuie să vă faceți griji cu privire la ora de vară. Consultați ericlippert.com/2014/04/14/standard-and-daylight-are-different. În plus, cu excepția unei ferestre de o oră în timpul schimbării, diferența dintre ora centrală și cea de est este de o oră. EST este cu o oră mai târziu decât CST, iar EDT este cu o oră mai târziu decât CDT. –  > Por phoog.
  • Mulțumesc, Phoog. acolo scrie că „Ora standard de est nu este definită ca fiind „orice oră este în New York City în acest moment”, ci ca „ora de est neajustată pentru ora de vară”. atunci cum se face că nu trebuie să-mi fac griji în legătură cu asta???? este din cauză că EST și CST vor fi întotdeauna sincronizate când vine vorba de schimbarea orei de vară? –  > Por AlgoAlpha.
  • Ceea ce am vrut să spun prin „vă faceți griji” este că EST exclude EDT. Dar, bineînțeles, ora de est poate fi EDT sau EST, așa că ar putea fi nevoie să vă faceți griji în această privință. În SUA, ora se schimbă la ora 2 dimineața ora locală, , astfel încât există o oră în fiecare primăvară când fusul orar estic este pe EDT în timp ce fusul orar central este pe CST, iar în toamnă există o oră când EST coexistă cu CDT. În timpul orei de toamnă, orele civile din New York și Chicago sunt egale; în timpul orei de primăvară, acestea sunt îndepărtate cu două ore. Dar dacă vă limitați la orele de lucru, atunci New York și Chicago sunt întotdeauna la o oră diferență. –  > Por phoog.
  • După ce am analizat cadrul TimeZoneInfo am văzut că aceasta încurcă lucrurile prin existența unui singur obiect numit „Eastern Standard Time”, al cărui obiect este „Eastern Standard Time”. SupportsDaylightSavingTime a cărui proprietate este adevărată. Dacă treceți „Eastern Daylight Time”, veți obține o excepție. Acest lucru nu este în concordanță cu terminologia corectă a timpului civil, dar reflectă concepția greșită comună pe care articolul de pe blogul lui Eric Lippert încearcă să o corecteze. –  > Por phoog.
  • Mulțumesc pentru informații… pentru scopurile mele, am de-a face cu orele din timpul întregii zile, nu doar cu orele de lucru. deci cred că am rămas cu problema. există vreo modalitate de a-mi adapta codul pentru a ajusta pentru ora de vară? –  > Por AlgoAlpha.
1 răspunsuri
phoog

Nu este clar din întrebarea dvs. care este problema; nu ați descris rezultatele pe care le produce codul dvs. și nici rezultatul așteptat.

Cu excepția a două perioade în fiecare an, de câte o oră fiecare, ora centrală și cea estică sunt întotdeauna la o oră distanță. Excepțiile sunt reprezentate de tranzițiile la și dinspre ora de vară. La ora 2 AM EST, în a doua duminică a lunii martie, ceasurile fusului orar estic se mută la ora 3 AM EDT. Pentru următoarele 60 de minute, ora de est este cu două ore înaintea orei centrale. Apoi, la ora 2 AM CST, ceasurile zonei centrale trec la ora 3 AM CDT, iar diferența revine la o oră.

În mod similar, în prima duminică din noiembrie, la ora 2 AM EDT, ceasurile sunt setate la 1 AM EST. Pentru următoarele 60 de minute, zona centrală rămâne la ora de vară, astfel încât ora în ambele locuri este aceeași. O oră mai târziu, ceasurile din zona centrală se dau înapoi cu o oră, iar diferența de fus orar normală este restabilită.

Deoarece orele dvs. nu se vor încadra niciodată în niciuna dintre aceste perioade, puteți presupune în mod sigur că orele din zona centrală sunt întotdeauna cu o oră înaintea orelor din zona estică.