2011-08-31 5 views
0

.Net 3.0을 사용 중이고 DateTime 값을 UTC에서 EST/EDT로 변환하고 싶습니다 (일광 절약 기능도 필요함).DateTime을 .NET 3.0에서 EST로 변환하십시오.

나는 TimeZoneInfo class의 도움으로 .Net 3.5를 사용하여 간단하게 달성 할 수 있음을 이해합니다. Timezone.CurrentTimeZone을 사용하고 싶지 않습니다. 로컬 컴퓨터의 시간대와 관계없이이 값을 EST/EDT로 변환해야하기 때문입니다. 불행히도 3.5로 전환하는 것은 옵션이 아닙니다. 인터넷에서 검색하면 시스템 레지스트리와 물건을 사용하는 옵션이 드러났습니다.

더 쉬운 방법이 있나요? 아무도 나를 올바른 방향으로 인도하고이 목표를 달성하기위한 옵션을 알려주시겠습니까?

답변

0

다음 함수는 특정 DateTime 개체가 동부 표준시의 일광 절약 시간을 나타내는 지 여부를 결정합니다.

public static bool IsEasternDaylightTime(DateTime dt){ 
     // Find out whether it's Daylight Saving Time 
     dt=dt.AddHours(-5); // Convert to Eastern Standard Time 
     if(dt.Year<=2006){ 
      // 2006 and earlier 
      if(dt.Month<=3 || dt.Month>=11){ 
       // Standard Time 
       return false; 
      } else if(dt.Month>=5 && dt.Month<=9){ 
       // Daylight Time 
       return true; 
      } else if(dt.Month==4){ 
       // find the first Sunday of April 
       int firstSunday=1; 
       while(new DateTime(dt.Year,dt.Month,firstSunday).DayOfWeek!= DayOfWeek.Sunday){ 
        firstSunday++; 
       } 
       if(dt.Day<firstSunday) 
        return false; 
       else if(dt.Day>firstSunday) 
        return true; 
       else { 
        // DST begins at 2AM 
        if(dt.Hour<2) 
         return false; // Standard Time 
        else if(dt.Hour>=3) 
         return true; // Daylight Time 
        else 
         return false; // Ambiguous Time 
       } 
      } else { 
       // find the last Sunday of October 
       int lastSunday=1; 
       for(int i=1;i<=31;i++){ 
        if(new DateTime(dt.Year,dt.Month,i).DayOfWeek== DayOfWeek.Sunday){ 
         lastSunday=i; 
        } 
       } 
       if(dt.Day<lastSunday) 
        return true; 
       else if(dt.Day>lastSunday) 
        return false; 
       else { 
        // DST ends at 2AM 
        if(dt.Hour<1) 
         return true; // Daylight Time 
        else if(dt.Hour>=2) 
         return false; // Standard Time 
        else 
         return false; // Standard Time 
       } 
      } 
     } else { 
      // 2007 and later 
      if(dt.Month<=2 || dt.Month>=12){ 
       // Standard Time 
       return false; 
      } else if(dt.Month>=4 && dt.Month<=10){ 
       // Daylight Time 
       return true; 
      } else if(dt.Month==3){ 
       // find the second Sunday of March 
       int sundays=0; 
       int lastSunday=1; 
       for(int i=1;i<=31;i++){ 
        if(new DateTime(dt.Year,dt.Month,i).DayOfWeek== DayOfWeek.Sunday){ 
         lastSunday=i; 
         sundays++; 
         if(sundays==2)break; 
        } 
       } 
       if(dt.Day<lastSunday) 
        return false; 
       else if(dt.Day>lastSunday) 
        return true; 
       else { 
        // DST begins at 2AM 
        if(dt.Hour<2) 
         return false; // Standard Time 
        else if(dt.Hour>=3) 
         return true; // Daylight Time 
        else 
         return false; // Ambiguous Time 
       } 
      } else { 
       // find the first Sunday of November 
       int firstSunday=1; 
       while(new DateTime(dt.Year,dt.Month,firstSunday).DayOfWeek!= DayOfWeek.Sunday){ 
        firstSunday++; 
       } 
       if(dt.Day<firstSunday) 
        return true; 
       else if(dt.Day>firstSunday) 
        return false; 
       else { 
        // DST ends at 2AM 
        if(dt.Hour<1) 
         return true; // Daylight Time 
        else if(dt.Hour>=2) 
         return false; // Standard Time 
        else 
         return false; // Standard Time 
       } 
      } 
     } 
    } 

이 함수를 사용하면 그에 따라 주어진 DateTime을 변환 할 수 있습니다. 예 :

// dateTime is assumed to be in UTC, not local time 
bool dst=IsEasternDaylightTime(dateTime); 
if(dst) 
    dateTime=dateTime.AddHours(-4); 
else 
    dateTime=dateTime.AddHours(-5);  
+0

답장을 보내 주셔서 감사합니다. 도움이되었습니다. – SupCSharp

관련 문제