开发者

Convert DateTime from UTC to EST in .Net 3.0

I am using .Net 3.0 and I want to convert a DateTime value from UTC to EST/EDT (need Daylight savings incorporated too).

I understand that this would 开发者_如何学Cbe straight-forward to achieve using .Net 3.5, with the help of TimeZoneInfo class. I do not want to use Timezone.CurrentTimeZone because I want this value converted to EST/EDT irrespective of the timezone of the local computer. Unfortunately switching to 3.5 is not an option. Search on the internet revealed options of using system registry and stuff.

Is there an easier way of doing this? Could anyone please lead me in the right direction and let me know the options to achieve this?


The following function determines whether a particular DateTime object represents Daylight Saving Time in the Eastern Time Zone.

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
                }
            }
        }
    }

With this function, you can convert the given DateTime accordingly. Example:

 // 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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜