解析美国东部时间与北京时间相互转换的实现代码_C#教程-查字典教程网
解析美国东部时间与北京时间相互转换的实现代码
解析美国东部时间与北京时间相互转换的实现代码
发布时间:2016-12-28 来源:查字典编辑
摘要:美国东部时间在UTC-5时区,北京时间是UTC+8时区,正常情况下美东时间比北京时间晚13个小时。需要注意的是美国有夏令时,而北京没有夏令时...

美国东部时间在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;

}

}

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类