以下函數確定某個特定的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 is assumed to be in UTC, not local time
bool dst=IsEasternDaylightTime(dateTime);
if(dst)
dateTime=dateTime.AddHours(-4);
else
dateTime=dateTime.AddHours(-5);
非常感謝您的回覆!這有幫助。 – SupCSharp