線上時間,伺服器時間轉化為本地時間
阿新 • • 發佈:2018-12-18
reawardData.Seconds = msg.Seconds;//伺服器發過來的玩家線上時間
PlayerData.Instance.OnlineGiftData.ServerTime = Globals.MTimeManager.ServerLongTimeNow();//記錄收到訊息的時間
當前伺服器時間= (當前時間-遊戲開始時的時間)+遊戲開始時伺服器發過來的時間
/// <summary> /// 當前的伺服器時間 /// </summary> /// <returns></returns> public long ServerLongTimeNow() { return (long)(NowSecond() - m_serverStartTime + m_serverBaseTime); }
獲取當前時間
public long NowSecond()
{
return (long)Time.realtimeSinceStartup;
}
登陸的時候呼叫 m_serverStartTime : 開始遊戲時的當前時間 m_serverBaseTime : 登陸時伺服器發回來的時間
public long m_serverStartTime; long m_serverBaseTime; public void SetLoginTime(long serverBaseTime)//伺服器返回伺服器時間訊息時呼叫 { m_serverStartTime = NowSecond(); m_serverBaseTime = serverBaseTime; //StartCoroutine(FreshDay()); StartCoroutine(CheckTimeEvent()); }
攜程實現的每秒鐘重新整理一次
IEnumerator CheckTimeEvent() { List<System.Action> remove = new List<System.Action>(); Dictionary<System.Action, float>.Enumerator ds; var waite = new WaitForSeconds(1f); while (true) { if (mDicinterval.Count > 0) { remove.Clear(); ds = mDicinterval.GetEnumerator(); while (ds.MoveNext()) { if (ds.Current.Value <= Time.realtimeSinceStartup) { ds.Current.Key(); remove.Add(ds.Current.Key); } } for (int i = 0; i < remove.Count; i++) { remove[i](); mDicinterval.Remove(remove[i]); } } else { yield break; } yield return waite; } }
當前線上秒數
page.Seconds = TotleOnlineGame();//領取時間限制
int TotleOnlineGame()//遊戲執行時間+伺服器的累計時間
{
long time = (Globals.MTimeManager.ServerLongTimeNow() - PlayerData.Instance.OnlineGiftData.ServerTime) +
PlayerData.Instance.OnlineGiftData.Seconds;
return (int)time;
}
活動開始時間,活動結束時間
page.startTimeStr = Globals.MTimeManager.ServerTimeToLocalTime(PlayerData.Instance.OnlineGiftData.StartTime).ToString("yyyy年M月d日");//ToShortDateString();//開始時間
page.endTimeStr = Globals.MTimeManager.ServerTimeToLocalTime(PlayerData.Instance.OnlineGiftData.EndTime).ToString("yyyy年M月d日");//.ToShortDateString();//結束 時間
public System.DateTime ServerTimeToLocalTime(long timestamp)
{
System.DateTime origin = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
//原本時間的基礎上加時間搓====秒
origin = origin.AddSeconds(timestamp);
#if NETFX_CORE
return System.TimeZoneInfo.ConvertTime(origin,System.TimeZoneInfo.Local);
#else
return System.TimeZone.CurrentTimeZone.ToLocalTime(origin);//把當前時間秒轉化為本地時間
#endif
}