系统时间获取(本地时间)
//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获取表示此实例的日期和时间的计时周期数。
计算某年某月的天数
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;
/// <summary>
/// 获取时间戳Timestamp
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
private int GetTimeStamp(DateTime dt)
{
DateTime dateStart = new DateTime(2018, 1, 1, 8, 0, 0);
int timeStamp = Convert.ToInt32((dt - dateStart).TotalSeconds);
return timeStamp;
}
/// <summary>
/// 时间戳Timestamp转换成日期
/// </summary>
/// <param name="timeStamp"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 时间戳Timestamp转换成日期
/// </summary>
/// <param name="timeStamp"></param>
/// <returns></returns>
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 + " )");
}
版权声明:本文为qq_39710961原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。