很多游戏具有每日登陆奖励功能,为防止玩家修改本地时间,需要读取服务器时间。下面分两部分介绍获取网络时间的两种方法,第一部分解析xml,第二部分截取string。
第一部分:通过国家授时中心链接获得的数据如下:

获取网络时间、解析xml、截取string
| 01 |
|
| 02 | - |
| 03 | - |
| 04 | |
| 05 | |
| 06 | |
| 07 | |
| 08 | |
| 09 | |
| 10 | |
| 11 | |
| 12 |
|
| 13 | ` |
然后解析xml获得当前时间,完整代码如下:
| 01 | using UnityEngine; |
| 02 | using System.Collections; |
| 03 | using System.Xml; |
| 04 | |
| 05 | /// |
| 06 | /// Get web time and parse xml |
| 07 | /// 获取网络时间/解析xml |
| 08 | /// |
| 09 | public class Test1 : MonoBehaviour |
| 10 | { |
| 11 | public string timeURL = "http://www.time.ac.cn/timeflash.asp?user=flash";//授时中心地址 |
| 12 | // Use this for initialization |
| 13 | void Start() |
| 14 | { |
| 15 | StartCoroutine(GetTime()); |
| 16 | } |
| 17 | |
| 18 | IEnumerator GetTime() |
| 19 | { |
| 20 | Debug.Log("Start get web time"); |
| 21 | WWW www = new WWW(timeURL); |
| 22 | while (!www.isDone) |
| 23 | { |
| 24 | Debug.Log("Getting web time"); |
| 25 | yield return www; |
| 26 | Debug.Log("Finish getting web time and whole xml is : " + www.text); |
| 27 | ParseXml(www); |
| 28 | } |
| 29 | } |
| 30 | |
| 31 | public void ParseXml(WWW www) |
| 32 | { |
| 33 | XmlDocument xmlDoc = new XmlDocument(); |
| 34 | xmlDoc.LoadXml(www.text); |
| 35 | XmlElement root = xmlDoc.DocumentElement; |
| 36 | XmlNodeList nodeList = root.SelectNodes("/ntsc/time"); |
| 37 | foreach (XmlElement xe in nodeList) |
| 38 | { //Unity3D教程手册:www.unitymanual.com |
| 39 | foreach (XmlElement x1 in xe.ChildNodes) |
| 40 | { |
| 41 | if (x1.Name == "year") |
| 42 | Debug.Log("Current year: " + x1.InnerText); |
| 43 | if (x1.Name == "month") |
| 44 | Debug.Log("Current month: " + x1.InnerText); |
| 45 | if (x1.Name == "day") |
| 46 | Debug.Log("Current day: " + x1.InnerText); |
| 47 | if (x1.Name == "hour") |
| 48 | Debug.Log("Current hour: " + x1.InnerText); |
| 49 | if (x1.Name == "minite") |
| 50 | Debug.Log("Current minite: " + x1.InnerText); |
| 51 | if (x1.Name == "second") |
| 52 | Debug.Log("Current second: " + x1.InnerText); |
| 53 | } |
| 54 | } |
| 55 | } |
| 56 | } |
获得的网络时间如下:

获取网络时间、解析xml、截取string
第二部分:通过北京时间链接地址获得的数据如下:
| 1 | t0=new Date().getTime(); nyear=2013; nmonth=6; nday=3; nwday=1; nhrs=16; nmin=57; nsec=29; |
然后截取string获得网络时间,具体方法是截取“;”获得年月日...然后截取“=”获得对应的时间.
完整代码如下:
| 01 | using UnityEngine; |
| 02 | using System.Collections; |
| 03 | |
| 04 | /// |
| 05 | /// Get web time and split string |
| 06 | /// 获取网络时间/截取string |
| 07 | /// |
| 08 | public class Test2 : MonoBehaviour |
| 09 | { |
| 10 | public string timeURL = "http://www.beijing-time.org/time.asp";//北京时间地址 |
| 11 | // Use this for initialization |
| 12 | void Start() |
| 13 | { |
| 14 | StartCoroutine(GetTime()); |
| 15 | } |
| 16 | |
| 17 | IEnumerator GetTime() |
| 18 | { |
| 19 | Debug.Log("Start get web time"); |
| 20 | WWW www = new WWW(timeURL); |
| 21 | while (!www.isDone) |
| 22 | { //Unity3D教程手册:www.unitymanual.com |
| 23 | Debug.Log("Getting web time"); |
| 24 | yield return www; |
| 25 | Debug.Log("Finish getting web time and whole xml is : " + www.text); |
| 26 | SplitString(www); |
| 27 | } |
| 28 | } |
| 29 | |
| 30 | public void SplitString(WWW www) |
| 31 | { |
| 32 | string[] timeData = www.text.Split(';'); |
| 33 | for (int i = 0; i < timeData.Length; i++) |
| 34 | { |
| 35 | string[] exactTime = timeData[i].Split('='); |
| 36 | foreach (string temp in exactTime) |
| 37 | Debug.Log(temp); |
| 38 | } |
| 39 | } |
| 40 | } |
获得的网络时间如下:
获取网络时间、解析xml、截取string