解析美国东部时间与北京时间相互转换的实现代码

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

(0)

相关推荐

  • 解析美国东部时间与北京时间相互转换的实现代码

    美国东部时间在UTC-5时区,北京时间是UTC+8时区,正常情况下美东时间比北京时间晚13个小时.需要注意的是美国有夏令时,而北京没有夏令时,美国夏令时时会让时间快一个小时,让人民早起早睡,所以在美国实行夏令时时美东时间比北京时间晚12个小时.逻辑如上所述,代码如下 复制代码 代码如下: /// <summary> /// AMESTime 的摘要说明: /// 美东时间的转换 ///  /// 美东时间在UTC-5时区,美国有夏时制,即在夏令时启用之后美东时间比起所在时区早一个小时,即UTC

  • php实现的太平洋时间和北京时间互转的自定义函数分享

    没有什么好说的了,直接上代码吧: /** * 太平洋时间转北京时间 */ public function pacificToPRC($time=''){ date_default_timezone_set('Pacific/Apia'); if(empty($time)){ $time = time(); } date_default_timezone_set('Asia/Shanghai'); $date = date('Y-m-d H:i:s',$time); $time = strtoti

  • PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法

    问题: php函数date("Y-n-d   H-i-s");   输出的时间与当地时间相差8个小时. 解决思路 北京时间是东8区,可能是时区问题.但是此前都没问题啊,经过google发现原来从php5.1.0开始,php.ini里加入了 date.timezone这个选项,默认情况下是关闭的,也就是显示的时间(无论用什么php命令)都是格林威治标准时间,和我们的时间(北京时间)差了正好8个小时. 在调用date()函数之前先设定时区. 方法一:date_default_timezon

  • 如何修改CentOS服务器时间为北京时间

    1.购买了VPS,CentOS系统,发现服务器时间与北京时间往往不一致,存在时差. [clive@server workspace]$ date 2018年 05月 30日 星期三 02:02:47 UTC 1.可以执行tzselect命令按提示更换时区,依次选择5-Asia,9-China,1-Beijing Time. Please identify a location so that time zone rules can be set correctly. Please select

  • php中把美国时间转为北京时间的自定义函数分享

    由于最近做邮件系统用到了时间转化,需要把从谷歌gmail下载下来的邮件时间转化为北京时间,于是乎就写了一个时间转化函数,希望对有需要的盆友所有启迪,我们都知道中美时间相差13个小时,下面直接上代码: function datezhuanhuan($dateparams) { $ccc=strtotime($dateparams); $date=date('Y-m-d'); $bjtime=date('Y-m-d',$ccc); if($date==$bjtime) { $sbjtime=date

  • UTC时间、GMT时间、本地时间、Unix时间戳的具体使用

    目录 1.UTC时间 与 GMT时间 2.UTC时间 与 本地时 3.UTC 与 Unix时间戳 1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的. 2.UTC时间 与 本地时 UTC + 时区差 = 本地时间 时区差东为正,西为负.在此,把东八区时区差记为 +0800, UTC + (+0800) = 本地(北京)时间 (1) 那么,UTC = 本地时间(北京时间))- 0800 (2) 3.UTC 与 Uni

  • PHP获取中国时间(上海时区时间)及美国时间的方法

    本文实例讲述了PHP获取中国时间(上海时区时间)及美国时间的方法.分享给大家供大家参考,具体如下: 中国时间: /** * 获取中国时间,即上海时区时间 * @param <type> $format * @return <type> */ function getChinaTime($format = "Y-m-d H:i:s") { $timezone_out = date_default_timezone_get(); date_default_timez

  • Python检查和同步本地时间(北京时间)的实现方法

    背景 有时本地服务器的时间不准了,需要同步互联网上的时间. 解决方案 NTP时间同步,找到一些可用的NTP服务器进行同步即可. 通过获取一些大型网站的时间来同步为自己的时间. * 由于NTP时间同步,如果相差比如有好几个小时,那么时间不同步矫正回来其实是非常慢的:我本次主要就是讲第2种方案,通过Python来实现的,可以直接设置为互联网上的时间. 要点描述 假设:百度.淘宝等非常大型的网站的时间是正确的 访问百度.淘宝等网站,它返回的HTTP Header中包含一个时间戳(一般是GMT时间).

  • python实现定时同步本机与北京时间的方法

    本文实例讲述了python实现定时同步本机与北京时间的方法.分享给大家供大家参考.具体如下: 这段python代码首先从www.beijing-time.org上获取标准的北京时间,然后同步获取的北京时间到本地 # -*- coding: utf-8 -*- import time,httplib import threading def getBeijinTime(): try: conn = httplib.HTTPConnection("www.beijing-time.org"

  • python正常时间和unix时间戳相互转换的方法

    本文实例讲述了python正常时间和unix时间戳相互转换的方法.分享给大家供大家参考.具体分析如下: 这段代码可以用来转换常规时间格式为unix时间戳,也可以将unix时间戳转换回来, 例如:1332888820 格式转换成 2012-03-28 06:53:40的形式 # -*- coding: utf-8 -*- import time def timestamp_datetime(value): format = '%Y-%m-%d %H:%M:%S' # value为传入的值为时间戳(

随机推荐