미 동부 시간 은 UTC-5 시간 대,베 이 징 시간 은 UTC+8 시간 대로,정상 적 인 경우 미 동시 간이 베 이 징 시간 보다 13 시간 늦다.주의해 야 할 것 은 미국 에 여름 캠프 가 있 고 베 이 징 에 여름 캠프 가 없 을 때 미국 여름 은 시간 을 한 시간 빨리 보 내 고 국민 들 을 일찍 일어나 게 하기 때문에 미국 에서 여름 캠프 를 실시 할 때 미 동 시간 은 베 이 징 시간 보다 12 시간 늦다 는 것 이다.논 리 는 위 에서 말 한 바 와 같이 코드 는 다음 과 같다
/// <summary>
/// AMESTime :
///
///
/// UTC-5 , , , UTC-4
/// (UTC+8 ) 13 , 12
///
///
/// 2005 , : 2007 3 , 11 。
/// </summary>
public class AMESTime
{
private static DateTime _thisYearDaylightSavingTimeStart,
_thisYearDaylightSavingTimeEnd;
private const int TIMEZONE_OFFSET_DAY_SAVING_LIGHT = -12;
private const int TIMEZONE_OFFSET = -13;
public static DateTime BeijingTimeToAMESTime(DateTime beijingTime)
{
int offsetHours = (IsNowAMESDayLightSavingTime ? TIMEZONE_OFFSET_DAY_SAVING_LIGHT:TIMEZONE_OFFSET);
return beijingTime.AddHours(offsetHours);
}
public static DateTime AMESNow
{
get
{
return BeijingTimeToAMESTime(DateTime.Now);
}
}
/// <summary>
///
/// 2007 3 , 11 。
/// </summary>
/// <returns> , true, false</returns>
public static bool IsNowAMESDayLightSavingTime
{
get
{
return DateTime.UtcNow > DayLightSavingStartTimeUtc
&& DateTime.UtcNow < DayLightSavingEndTimeUtc;
}
}
/// <summary>
///
/// </summary>
static DateTime DayLightSavingStartTimeUtc
{
get
{
if(_thisYearDaylightSavingTimeStart.Year != DateTime.Now.Year)
{
DateTime temp = new DateTime(DateTime.Now.Year,3,8,0,0,0);
while(temp.DayOfWeek != DayOfWeek.Sunday)
{
temp = temp.AddDays(1);
}
_thisYearDaylightSavingTimeStart = temp.AddHours(TIMEZONE_OFFSET);
}
return _thisYearDaylightSavingTimeStart;
}
}
/// <summary>
///
/// </summary>
static DateTime DayLightSavingEndTimeUtc
{
get
{
if(_thisYearDaylightSavingTimeEnd.Year != DateTime.Now.Year)
{
DateTime temp = new DateTime(DateTime.Now.Year,11,1,0,0,0);
while(temp.DayOfWeek != DayOfWeek.Sunday)
{
temp = temp.AddDays(1);
}
_thisYearDaylightSavingTimeEnd = temp.AddHours(TIMEZONE_OFFSET_DAY_SAVING_LIGHT);
}
return _thisYearDaylightSavingTimeEnd;
}
}
}
.