今天在csdn上见网友在问如何获取Nist的美国官方标准时间,经摸索、查资料和自己实践后。
做出以下代码,已测试。思路其实还是很简单的:
       1、发出对于指定网页的访问请求
       2、获取返回的html文件,进行模式匹配定位和分割,即取得了对应的时间和日期
       此方法,对于其他地方需从网页获取信息有可参考的。

命名空间需添加:
using System.Net;                                   
using System.IO;                                   
using System.Text.RegularExpressions;

方法代码:

//获取美国官方时间和日期
        private void GetNistTimeUS( out string time, out string Data )
        {
            try
            {
                //nist.time.gov的url
                string strNistUrl = "http://nist.time.gov/timezone.cgi?UTC/s/0";

                //构造并实例化一个WebRequest
                System.Net.WebRequest myHttpWebRequest = System.Net.HttpWebRequest.Create( strNistUrl );
                //设置连接超时时间
                myHttpWebRequest.Timeout = 8000;
                //设置WebResponse,接收返回信息
                System.Net.WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
                //获取返回信息流信息
                Stream sr = myHttpWebResponse.GetResponseStream();
                //设置流阅读器
                StreamReader reader = new StreamReader(sr, System.Text.Encoding.ASCII);
                //流输出为字符串
                String srdata = reader.ReadToEnd();
                //将返回html文本中的双引号变为单引号
                srdata = srdata.Replace( "\"","\'");
                
                //用模式匹配加分割的方式定位和获取时间信息
                string strOut = Regex.Split( srdata, "color='white'><b>" , RegexOptions.IgnoreCase)[1];
                string strTime = Regex.Split( strOut , "<br>", RegexOptions.IgnoreCase )[0];
                time = DateTime.Parse( strTime ).ToLongTimeString();
                
                //用模式匹配加分割的方式定位和获取日期信息
                string strOut1 = Regex.Split( srdata, "'5' color='white'>" , RegexOptions.IgnoreCase)[1];
                string strData = Regex.Split( strOut1 , "<br>", RegexOptions.IgnoreCase )[0];
                Data = DateTime.Parse( strData ).ToShortDateString();
            }
            catch( System.Exception ex )
            {
                time = string.Empty;
                Data = string.Empty;
                MessageBox.Show( "获取时间出错:" + ex.Message );
            }
        }
        
        //获取中国标准时间(由美国官方时间折算)
        private void GetNistTimeCN( out string time, out string Data )
        {
            try
            {
                //nist.time.gov的url
                string strNistUrl = "http://nist.time.gov/timezone.cgi?UTC/s/0";

                //构造并实例化一个WebRequest
                System.Net.WebRequest myHttpWebRequest = System.Net.HttpWebRequest.Create( strNistUrl );
                //设置连接超时时间
                myHttpWebRequest.Timeout = 8000;
                //设置WebResponse,接收返回信息
                System.Net.WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
                //获取返回信息流信息
                Stream sr = myHttpWebResponse.GetResponseStream();
                //设置流阅读器
                StreamReader reader = new StreamReader(sr, System.Text.Encoding.ASCII);
                //流输出为字符串
                String srdata = reader.ReadToEnd();
                //将返回html文本中的双引号变为单引号
                srdata = srdata.Replace( "\"","\'");
                
                //用模式匹配加分割的方式定位和获取时间信息
                string strOut = Regex.Split( srdata, "color='white'><b>" , RegexOptions.IgnoreCase)[1];
                string strTime = Regex.Split( strOut , "<br>", RegexOptions.IgnoreCase )[0];
                //小时需调整,因时区相差8小时
                time = DateTime.Parse( strTime ).AddHours( 8 ).ToLongTimeString();

                //用模式匹配加分割的方式定位和获取日期信息
                string strOut1 = Regex.Split( srdata, "'5' color='white'>" , RegexOptions.IgnoreCase)[1];
                string strData = Regex.Split( strOut1 , "<br>", RegexOptions.IgnoreCase )[0];
                //获取中国时间-小时部分
                int intHourCn = int.Parse( time.Split( ':' )[0] );
                //获取美国时间-小时部分
                int intHourUS = int.Parse( DateTime.Parse( strTime ).ToLongTimeString().Split( ':' )[0] );
                //比较小时差异,调整日期差异
                if ( intHourCn < intHourUS )
                {
                    Data = DateTime.Parse( strData ).AddDays(1).ToShortDateString();
                }
                else
                {
                    Data = DateTime.Parse( strData ).ToShortDateString();
                }
            }
            catch( System.Exception ex )
            {
                time = string.Empty;
                Data = string.Empty;
                MessageBox.Show( "获取时间出错:" + ex.Message );
            }
        }

调用代码:

        //获取美国时间按钮
        private void btnGetTime_Click(object sender, System.EventArgs e)
        {
            try
            {
                string strTime = string.Empty;
                string strDate = string.Empty;

                GetNistTimeUS( out strTime, out strDate );
                txtTime.Text = strTime;
                txtData.Text = strDate;
            }
            catch( System.Exception ex )
            {
                MessageBox.Show( ex.Message );
            }
        }

        //获取中国时间按钮
        private void btnGetTimeCN_Click(object sender, System.EventArgs e)
        {
            try
            {
                string strTime = string.Empty;
                string strDate = string.Empty;

                GetNistTimeCN( out strTime, out strDate );
                txtTime.Text = strTime;
                txtData.Text = strDate;
            }
            catch( System.Exception ex )
            {
                MessageBox.Show( ex.Message );
            }
        }

转载于:https://www.cnblogs.com/heekui/archive/2006/05/20/404829.html

获取Nist的美国官方标准时间的解决办法相关推荐

  1. android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

    android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法 原方法: public static Bitmap getSmallBitmap(Strin ...

  2. 自定义View 中很关键的问题View获取宽/高是0 的解决办法

    原因 Activity的生命周期方法 与 View在measure过程 不是同步执行的,也就是说Activity在执行onCreate ,onStart , onResume 过程中 ,View的测量 ...

  3. Nginx反向代理服务器获取不到端口的问题的解决办法

    Nginx反向代理服务器获取不到端口的问题的解决办法 参考文章: (1)Nginx反向代理服务器获取不到端口的问题的解决办法 (2)https://www.cnblogs.com/Leslieblog ...

  4. 关于如何解决近期微赞或微擎有些模块提示不是官方安装的解决办法 http://bbs.517weixin.com/thread-1323-1-1.html

    关于如何解决近期微赞或微擎有些模块提示不是官方安装的解决办法 http://bbs.517weixin.com/thread-1323-1-1.html 对不起!您使用的插件不是微赞官方安装的,请移步 ...

  5. csgo怎么一直连接服务器失败,CSGO连接到官方服务器失败怎么办?CSGO连接到官方服务器失败解决办法...

    CSGO游戏将玩家分为反恐精英(Counter Terrorists/CT)阵营与恐怖份子(Terrorists/T)阵营两队,每个队伍必须在一个地图上进行多回合的战斗.赢得回合的方法是达到该地图要求 ...

  6. requests获取到的cookies数量不够的解决办法

    在使用普通的requests.get或者requests.post来获取网站cookies的时候,可能会出现res.cookies.get_dict()后字典中cookies数量不够的情况,一种解决办 ...

  7. win10 cortana搜索空白, 占用CPU, 官方powershell(唯一)解决办法

    电脑是突然出现这个问题 (可能因为最近改过一些设置), 总之搜索界面空白, CPU一直占用30%左右且电源使用非常高, 没解法的时候暂时重命名searchUI.exe 但这样就用不了搜索了. 之前有装 ...

  8. 沙盒软件SimPholders2无法获取当前版本Xcode的沙盒路径解决办法

    SimPholders是一个快速简单的小工具,可以帮助开发者快速访问iPhone模拟器应用,有的时候使用他找不到自己用的模拟器,是不是很纠结呢? 解决办法在终端输入 sudo xcode-select ...

  9. 如何解决近期微赞或微擎有些模块提示不是官方安装的解决办法

    警告1!您使用的插件不是微赞官方安装的,请移步微赞论坛" "警告2!您使用的插件不是微赞官方安装的,请移步微赞论坛 出现这样的提示,请按以下方式进行解决: 如果是微赞,请按如下方法 ...

  10. 在controller中无法通过注解@Value获取到配置文件中定义的值解决办法

    使用springMVC的朋友,有时候可能会遇到以下问题: 想在controller中使用@Value指定变量,但是无法得到对应的值.而在server层获取,是正常的. 解决方案: 1:在srping- ...

最新文章

  1. 开源中国git关联xcode操作步骤
  2. R语言系统自带及附属包开元可用数据集汇总
  3. 中国大陆穷光蛋排行榜---转
  4. 振动数据 自相关计算时时延_工业设备智能运维如何做?---振动监测
  5. 笔记-信息系统开发基础-信息系统开发方法
  6. 青年报告_了解青年的情绪
  7. [转]完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
  8. th:text为null报错_为什么建议你用nullptr而不是NULL?
  9. 用js判断.net版本
  10. 企业微信接收消息服务器配置php,微信企业号配置及在公众号里获取用户信息
  11. 西门子plc编程软件step 7 microwin smart下载指南
  12. 怎么查看个人CSDN账号积分-最靠谱!
  13. 机器人体验营笔记(一)概要
  14. java排队系统模型,排队论模型(三):M / M / s/ s 损失制排队模型
  15. 使用MAKER进行全基因组基因注释-基础篇
  16. 亚马逊卖家培训返校季爆单技巧
  17. 知识图谱-知识体系与知识融合-实体消歧
  18. 我们怎样制作照片拼图?简单实用的拼图方法来了
  19. 朋友,我真诚的劝你别网贷
  20. DRF路由Routers

热门文章

  1. Java线程池 面试考点
  2. 面试必会 HashMap抄底不再怕
  3. 2021-06-06label标签 icon 图标设置
  4. 初始MySQL增删改查数据
  5. java lambda_Java 8 Lambda 表达式 ( 中 )- 外部参数
  6. JAVA中map删除键值对_以有效的方式从Map中删除多个键?
  7. 设计模式之GOF23迭代器模式
  8. hp ux安装oracle 11g,HP UX安装oracle 11g asm扫不到盘
  9. php案例之后台数据显示-- mysqli面向对象版(Object Oriented Programming = OOP)
  10. 八、面向对象三大特征(二)—— 继承