分享

U3D实现抓取网络时间与本地时间

 鸿蛟家平 2016-08-11
请选中您要

U3D实现抓取网络时间与本地时间

热度 234 2016-8-10 09:43 |个人分类:脚本类| 网络时间获取

  
   
    实现的思路很简单: 1.通过网页网址来获取时间戳 
                                    2.将时间戳裁剪成需要的长度 
                                    3.将时间戳转换为C#模式
 
  下面看效果图


   如果网友需要可以参考一下

   下面上代码

   

[code]csharpcode:

using UnityEngine;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace ddd
{
   public class TimeLimited:MonoBehaviour
    {
        public void Start( )
        {
            string str = GetWebClient("http://www./cgi-bin/gts/time5a.pr?a=2");
            //string str = GetTimeStamp();   // 验证时间戳该有的长度
            //Console.WriteLine(str);   
            string timeStamp = str.Split('=')[1].Substring(0, 10);  //网页获取的数据长度超了,所以要裁剪
                                                                    //Console.WriteLine(timeStamp);

            DateTime datetime = GetTime(timeStamp);

            Debug.Log((int)datetime.Year+"年"+ (int)datetime.Month+"月"+ (int)datetime.Day+"日");//输出时间
            if ((int)datetime.Year > 2016) //判断是否大于2016年
            {
                Application.Quit();
            }
            if ((int)datetime.Month != 8) //是否是当前月份
            {
                Application.Quit();
            }
            if ((int)datetime.Day > 20) //是否大于20号
            {
                Application.Quit();
            }

        }

        private static string GetWebClient(string url)
        {
            string strHTML = "";
            WebClient myWebClient = new WebClient();
            Stream myStream = myWebClient.OpenRead(url);
            StreamReader sr = new StreamReader(myStream, System.Text.Encoding.GetEncoding("utf-8"));
            strHTML = sr.ReadToEnd();
            myStream.Close();
            return strHTML;
        }

        /// <summary>
        /// 获取时间戳
        /// 本方法只是为了测试时间戳样式
        /// </summary>
        /// <returns></returns>
        private static string GetTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }

        /// <summary>
        /// 时间戳转为C#格式时间
        /// </summary>
        /// <param name="timeStamp">Unix时间戳格式</param>
        /// <returns>C#格式时间</returns>
        public static DateTime GetTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        }
    }
}

     网络获取时间有一个弊端。 当我们抓取网页的时间戳时,如果网站打开时间很久,那么因为占用的是U3D的主线程

    那么客户端就会失去响应。

     这里强烈建议:将代码放在协程里使用。 并且判断是否失去响应,是否获取到时间戳,是否有网络连接等。

     

     网站如果失效大家一定要还一个网址来获取时间戳。

     (这里可以使用北京时间网址。北京气象等网址自行搜索)

       代码是别的地方拿来的仅供学习。希望大家会需要


      另附上本地时间获取

        System.DateTime.Now.Year //获取年    

       System.DateTime.Now.Month  //获取月

       System.DateTime.Now.Day //获取日

     


保存的内容,粘贴到此文本框

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多