Unity_Time总结

系统时间获取(本地时间)

        //DateTime(Int32 年, Int32 月, Int32 日)
        //DateTime(年,月,日,时,分,秒,(可再加毫秒) / 协调世界时(UTC) 或本地时间)
        Debug.Log("W now  " + System.DateTime.Now);
        //当前时间(年月日时分秒)  本地时间 12小时制
        Debug.Log("W utc  " + System.DateTime.UtcNow);
        //当前时间(年月日时分秒)([受时区影响;我们中国使用的是东八区的时间,所以和UTC大了8个小时])
        Debug.Log("W year  " + System.DateTime.Now.Year);
        //当前时间(年)  
        Debug.Log("W month   " + System.DateTime.Now.Month); 
        //当前时间(月) 
        Debug.Log("W day   " + System.DateTime.Now.Day);    
        // 当前时间(日)  获取此实例所表示的日期为该月中的第几天
        Debug.Log("W day   " + System.DateTime.Now.Date);    
        // 当前时间(日) 1/22/2017 12:00:00 AM获取此实例的日期部分;其日期与此实例相同,其时间值设置为午夜 12:00:00 (00:00:00)。
        Debug.Log("W week" + System.DateTime.Now.DayOfYear.ToString());
        // 当前时间(日)获取此实例所表示的日期是该年中的第几天。
        Debug.Log("W h    " + System.DateTime.Now.Hour);
        // 当前时间(时)  24H制
        Debug.Log("W min   " + System.DateTime.Now.Minute);  
        // 当前时间(分)  
        Debug.Log("W second   " + System.DateTime.Now.Second);
        // 当前时间(秒)  
        Debug.Log("W week " + System.DateTime.Now.DayOfWeek.ToString());
        // 当前时间(周)
        Debug.Log("W week " + System.DateTime.Now.Kind.ToString());
        Debug.Log("W week " + System.DateTime.UtcNow.Kind.ToString());
        //Local 返回基于本地时间Local、协调世界时 (UTC),还是两者皆否
        Debug.Log("W week " + System.DateTime.Now.Ticks.ToString());
        //632667942284412864获取表示此实例的日期和时间的计时周期数。

Unity_Time总结_第1张图片
Unity_Time总结_第2张图片
这里写图片描述

计算某年某月的天数
int days = DateTime.DaysInMonth(2007, 8);
days = 31;

给日期增加一天、减少一天
DateTime dt =DateTime.Now;
dt.AddDays(1); //增加一天
dt.AddDays(-1);//减少一天

本地时间可以实时获取,但是因为是依据本机获取,如果修改主机时间就可以进而修改游戏时间,因此:
对于单机游戏而言我们不需要实时获取网络时间,但是也要获取一个唯一的时间(时间戳)

using UnityEngine;
using System.Collections;
using System;

public class TimeOfNet : MonoBehaviour {

    protected int m_timestamp;

    ///   
    /// 获取时间戳Timestamp    
    ///   
    ///   
    ///   
    private int GetTimeStamp(DateTime dt)
    {
        DateTime dateStart = new DateTime(2018, 1, 1, 8, 0, 0);
        int timeStamp = Convert.ToInt32((dt - dateStart).TotalSeconds);
        return timeStamp;
    }

    ///   
    /// 时间戳Timestamp转换成日期  
    ///   
    ///   
    ///   
    private DateTime GetDateTime(int timeStamp)
    {
        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(2018, 1, 1));
        long lTime = ((long)timeStamp * 10000000);
        TimeSpan toNow = new TimeSpan(lTime);
        DateTime targetDt = dtStart.Add(toNow);
        return targetDt;
    }

    ///   
    /// 时间戳Timestamp转换成日期  
    ///   
    ///   
    ///   
    private DateTime GetDateTime(string timeStamp)
    {
        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(2018, 1, 1));
        long lTime = long.Parse(timeStamp + "0000000");
        TimeSpan toNow = new TimeSpan(lTime);
        DateTime targetDt = dtStart.Add(toNow);
        return dtStart.Add(toNow);
    }

    void OnGUI()
    {
        if (GUILayout.Button("获取当前时间的时间戳"))
        {
            DateTime dtNow = DateTime.Now;
            m_timestamp = GetTimeStamp(dtNow);
            Debug.Log(string.Format("获取当前时间的时间戳 = {0} -> {1}", dtNow.ToString("yyyy-MM-dd hh:mm:ss"), m_timestamp));
        }

        if (GUILayout.Button("将时间戳转换成日期_1"))
        {
            DateTime dt = GetDateTime(m_timestamp);
            Debug.Log(string.Format("将时间戳转换成日期_1 = {0} -> {1}", m_timestamp, dt.ToString("yyyy-MM-dd hh:mm:ss")));
        }

        if (GUILayout.Button("将时间戳转换成日期_2"))
        {
            DateTime dt = GetDateTime(m_timestamp.ToString());
            Debug.Log(string.Format("将时间戳转换成日期_2 = {0} -> {1}", m_timestamp, dt.ToString("yyyy-MM-dd hh:mm:ss")));
        }
    }
}

那么网络游戏就必须基于服务器时间进行获取了:(以下是一个腾讯的开放服务器)

    public int year, mouth, day, hour, min;
    private string _day;
    public string timeURL = "http://cgi.im.qq.com/cgi-bin/cgi_svrtime";
    private float _time;
    private int num;


    IEnumerator GetTime()
    {
        WWW www = new WWW(timeURL);
        while (!www.isDone)
        {
            yield return www;
        }
        SplitTime(www.text);
    }
     void SplitTime(string dateTime)
    {
        dateTime = dateTime.Replace("-", "|");
        dateTime = dateTime.Replace(" ", "|");
        dateTime = dateTime.Replace(":", "|");
        string[] Times = dateTime.Split('|');
        year = int.Parse(Times[0]);
        mouth = int.Parse(Times[1]);
        day = int.Parse(Times[2]);
        hour = int.Parse(Times[3]);
        min = int.Parse(Times[4]);
        Debug.Log( "当前时间:" + year + "-" + mouth + "-" + day + " " + hour + ":" + min + " ( " + _day + " )");
    }

你可能感兴趣的:(Unity)