zoukankan      html  css  js  c++  java
  • 美国东部时间和北京时间之间的转换

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

  • 相关阅读:
    homebrew
    Flutter状态管理之provide和provider的使用区别
    Flutter Bloc状态管理 简单上手
    Flutter 路由传入中文参数报错无法push问题
    Flutter 一些常用第三方库、插件
    js替换字符串中的空格,换行符 或 替换成<br>
    Flutter状态管理Provider,简单上手
    Flutter Resolving dependencies...很慢解决办法
    Flutter布局--appbar导航栏和状态栏
    Flutter运行报错 `kernel_snapshot for errors` 解决方案
  • 原文地址:https://www.cnblogs.com/yukaizhao/p/ames_time_beijing_time.html
Copyright © 2011-2022 走看看