zoukankan      html  css  js  c++  java
  • C#获取获取北京时间多种方法

    #region 获取网络时间
    ///<summary>
    /// 获取中国国家授时中心网络服务器时间发布的当前时间
    ///</summary>
    ///<returns></returns>
    publicstatic DateTime GetChineseDateTime()
    {
        DateTime res = DateTime.MinValue;
        try
        {
            string url = "http://www.time.ac.cn/stime.asp";
            HttpHelper helper = new HttpHelper();
            helper.Encoding = Encoding.Default;
            string html = helper.GetHtml(url);
            string patDt = @"\d{4}年\d{1,2}月\d{1,2}日";
            string patHr = @"hrs\s+=\s+\d{1,2}";
            string patMn = @"min\s+=\s+\d{1,2}";
            string patSc = @"sec\s+=\s+\d{1,2}";
            Regex regDt = new Regex(patDt);
            Regex regHr = new Regex(patHr);
            Regex regMn = new Regex(patMn);
            Regex regSc = new Regex(patSc);
    
            res = DateTime.Parse(regDt.Match(html).Value);
            int hr = GetInt(regHr.Match(html).Value, false);
            int mn = GetInt(regMn.Match(html).Value, false);
            int sc = GetInt(regSc.Match(html).Value, false);
            res = res.AddHours(hr).AddMinutes(mn).AddSeconds(sc);
        }
        catch { }
        return res;
    }
    
    ///<summary>
    /// 从指定的字符串中获取整数
    ///</summary>
    ///<param name="origin">原始的字符串</param>
    ///<param name="fullMatch">是否完全匹配,若为false,则返回字符串中的第一个整数数字</param>
    ///<returns>整数数字</returns>
    privatestaticint GetInt(string origin, bool fullMatch)
    {
        if (string.IsNullOrEmpty(origin))
        {
            return0;
        }
        origin = origin.Trim();
        if (!fullMatch)
        {
            string pat = @"-?\d+";
            Regex reg = new Regex(pat);
            origin = reg.Match(origin.Trim()).Value;
        }
        int res = 0;
        int.TryParse(origin, out res);
        return res;
    }
    #endregion
    ///<summary>
    /// 获取标准北京时间1
    ///</summary>
    ///<returns></returns>
    publicstatic DateTime GetStandardTime()
    {
        //<?xml version="1.0" encoding="GB2312" ?>
        //- <ntsc>
        //- <time>
        //  <year>2011</year>
        //  <month>7</month>
        //  <day>10</day>
        //  <Weekday />
        //  <hour>19</hour>
        //  <minite>45</minite>
        //  <second>37</second>
        //  <Millisecond />
        //  </time>
        //  </ntsc>
        DateTime dt;
        WebRequest wrt = null;
        WebResponse wrp = null;
        try
        {
            wrt = WebRequest.Create("http://www.time.ac.cn/timeflash.asp?user=flash");
            wrt.Credentials = CredentialCache.DefaultCredentials;
    
            wrp = wrt.GetResponse();
            StreamReader sr = new StreamReader(wrp.GetResponseStream(), Encoding.UTF8);
            string html = sr.ReadToEnd();
    
            sr.Close();
            wrp.Close();
    
            int yearIndex = html.IndexOf("<year>") + 6;
            int monthIndex = html.IndexOf("<month>") + 7;
            int dayIndex = html.IndexOf("<day>") + 5;
            int hourIndex = html.IndexOf("<hour>") + 6;
            int miniteIndex = html.IndexOf("<minite>") + 8;
            int secondIndex = html.IndexOf("<second>") + 8;
    
            string year = html.Substring(yearIndex, html.IndexOf("</year>") - yearIndex);
            string month = html.Substring(monthIndex, html.IndexOf("</month>") - monthIndex); ;
            string day = html.Substring(dayIndex, html.IndexOf("</day>") - dayIndex);
            string hour = html.Substring(hourIndex, html.IndexOf("</hour>") - hourIndex);
            string minite = html.Substring(miniteIndex, html.IndexOf("</minite>") - miniteIndex);
            string second = html.Substring(secondIndex, html.IndexOf("</second>") - secondIndex);
            dt = DateTime.Parse(year + "-" + month + "-" + day + "" + hour + ":" + minite + ":" + second);
        }
        catch (WebException)
        {
            return DateTime.Parse("2011-1-1");
        }
        catch (Exception)
        {
            return DateTime.Parse("2011-1-1");
        }
        finally
        {
            if (wrp != null)
                wrp.Close();
            if (wrt != null)
                wrt.Abort();
        }
        return dt;
    }
    
    ///<summary>
    /// 获取标准北京时间2
    ///</summary>
    ///<returns></returns>
    publicstatic DateTime GetBeijingTime()
    {
        //t0 = new Date().getTime();
        //nyear = 2011;
        //nmonth = 7;
        //nday = 5;
        //nwday = 2;
        //nhrs = 17;
        //nmin = 12;
        //nsec = 12;
        DateTime dt;
        WebRequest wrt = null;
        WebResponse wrp = null;
        try
        {
            wrt = WebRequest.Create("http://www.beijing-time.org/time.asp");
            wrp = wrt.GetResponse();
    
            string html = string.Empty;
            using (Stream stream = wrp.GetResponseStream())
            {
                using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
                {
                    html = sr.ReadToEnd();
                }
            }
    
            string[] tempArray = html.Split(';');
            for (int i = 0; i < tempArray.Length; i++)
            {
                tempArray[i] = tempArray[i].Replace("\r\n", "");
            }
    
            string year = tempArray[1].Substring(tempArray[1].IndexOf("nyear=") + 6);
            string month = tempArray[2].Substring(tempArray[2].IndexOf("nmonth=") + 7);
            string day = tempArray[3].Substring(tempArray[3].IndexOf("nday=") + 5);
            string hour = tempArray[5].Substring(tempArray[5].IndexOf("nhrs=") + 5);
            string minite = tempArray[6].Substring(tempArray[6].IndexOf("nmin=") + 5);
            string second = tempArray[7].Substring(tempArray[7].IndexOf("nsec=") + 5);
            dt = DateTime.Parse(year + "-" + month + "-" + day + "" + hour + ":" + minite + ":" + second);
        }
        catch (WebException)
        {
            return DateTime.Parse("2011-1-1");
        }
        catch (Exception)
        {
            return DateTime.Parse("2011-1-1");
        }
        finally
        {
            if (wrp != null)
                wrp.Close();
            if (wrt != null)
                wrt.Abort();
        }
        return dt;
    }

    /// <summary>
    /// 获取标准北京时间
    /// </summary>
    /// <returns></returns>
    public static DateTime DataStandardTime()
    {
        DateTime dt;
    
        //返回国际标准时间
        //只使用的时间服务器的IP地址,未使用域名
        try
        {
            string[,] 时间服务器 = new string[14, 2];
            int[] 搜索顺序 = new int[] { 3, 2, 4, 8, 9, 6, 11, 5, 10, 0, 1, 7, 12 };
            时间服务器[0, 0] = "time-a.nist.gov";
            时间服务器[0, 1] = "129.6.15.28";
            时间服务器[1, 0] = "time-b.nist.gov";
            时间服务器[1, 1] = "129.6.15.29";
            时间服务器[2, 0] = "time-a.timefreq.bldrdoc.gov";
            时间服务器[2, 1] = "132.163.4.101";
            时间服务器[3, 0] = "time-b.timefreq.bldrdoc.gov";
            时间服务器[3, 1] = "132.163.4.102";
            时间服务器[4, 0] = "time-c.timefreq.bldrdoc.gov";
            时间服务器[4, 1] = "132.163.4.103";
            时间服务器[5, 0] = "utcnist.colorado.edu";
            时间服务器[5, 1] = "128.138.140.44";
            时间服务器[6, 0] = "time.nist.gov";
            时间服务器[6, 1] = "192.43.244.18";
            时间服务器[7, 0] = "time-nw.nist.gov";
            时间服务器[7, 1] = "131.107.1.10";
            时间服务器[8, 0] = "nist1.symmetricom.com";
            时间服务器[8, 1] = "69.25.96.13";
            时间服务器[9, 0] = "nist1-dc.glassey.com";
            时间服务器[9, 1] = "216.200.93.8";
            时间服务器[10, 0] = "nist1-ny.glassey.com";
            时间服务器[10, 1] = "208.184.49.9";
            时间服务器[11, 0] = "nist1-sj.glassey.com";
            时间服务器[11, 1] = "207.126.98.204";
            时间服务器[12, 0] = "nist1.aol-ca.truetime.com";
            时间服务器[12, 1] = "207.200.81.113";
            时间服务器[13, 0] = "nist1.aol-va.truetime.com";
            时间服务器[13, 1] = "64.236.96.53";
            int portNum = 13;
            string hostName;
            byte[] bytes = new byte[1024];
            int bytesRead = 0;
            System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
            for (int i = 0; i < 13; i++)
            {
                hostName = 时间服务器[搜索顺序[i], 1];
                try
                {
                    client.Connect(hostName, portNum);
                    System.Net.Sockets.NetworkStream ns = client.GetStream();
                    bytesRead = ns.Read(bytes, 0, bytes.Length);
                    client.Close();
                    break;
                }
                catch (System.Exception)
                {
                }
            }
            char[] sp = new char[1];
            sp[0] = ' ';
            dt = new DateTime();
            string str1;
            str1 = System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRead);
    
            string[] s;
            s = str1.Split(sp);
            if (s.Length >= 2)
            {
                dt = System.DateTime.Parse(s[1] + " " + s[2]);//得到标准时间
                dt = dt.AddHours(8);//得到北京时间*/
            }
            else
            {
                dt = DateTime.Parse("2011-1-1");
            }
        }
        catch (Exception)
        {
            dt = DateTime.Parse("2011-1-1");
        }
        return dt;
    }

    调用示例:

    DateTime dt = Common.GetBeijingTime();// Common.GetStandardTime();
    if (dt.ToString() == "2011-1-1 0:00:00")
    {
        MessageBox.Show("网络异常,不能启动本程序!");
        Application.Exit();
        return;
    }
  • 相关阅读:
    CentOS6 samba配置实例及详解
    itools airplay没出现该图标的解决方法
    修改注册表让您的Windows7系统彻底禁用U盘
    iphone 4S 下拉通知背景切换的方法
    JAVA EE Apache Zookeeper / Google Chubby
    db Oracle OLTP OLAP / apache kylin / druid
    appServer WAS / WebSphere / javacore.txt 、heapdump.phd、core.dmp、Snap.trc
    JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
    OS + Linux CoreOS / Ubuntu 16.04 LTS / docker / openSTF
    App Store Review Guidelines 送審前十項常犯必檢查項目表
  • 原文地址:https://www.cnblogs.com/shadowme/p/6250029.html
Copyright © 2011-2022 走看看