Unity 服務器時間

using System;
using UnityEngine;

public class ServerTimeManager : SingletonMonoBehaviour<ServerTimeManager>
{
    private long lCurServerTime = 0;					     //當前服務器時間 毫秒爲單位
    private float fCheckTime = 0.0f;
    private DateTime daStartTime = new DateTime(1970, 1, 1); //服務器相對於C#的起始時間
    private float deltaTime = 0.0f;

    void Awake()
    {
        SetServerTime((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000);
    }

    public void SetServerTime(long _time)
    {
        fCheckTime = Time.realtimeSinceStartup;
        lCurServerTime = _time;

        Update();
    }

    public long GetfCurSerTime()
    {
        return lCurServerTime + (long)(deltaTime * 1000);
    }

    public DateTime GetServerTime()
    {
        return GetDateTime(GetfCurSerTime());
    }

    private void Update()
    {
        deltaTime = Time.realtimeSinceStartup - fCheckTime;
    }

    public bool IsSameDay(DateTime day)
    {
        DateTime now = GetServerTime();
        return day.Day == now.Day && day.Month == now.Month && day.Year == now.Year;
    }

    public bool IsSameDay(long time)
    {
        DateTime day = GetDateTime(time);
        return IsSameDay(day);
    }

    public float DeltaTime()
    {
        return deltaTime;
    }

    public DateTime GetDateTime(long millisceonds)
    {
        return daStartTime.AddMilliseconds(millisceonds).ToLocalTime();
    }

    public string GetDaysToNowString(long time)
    {
        if(time == 0)
        {
            return "";
        }
        if (IsSameDay(time))
        {
            return "今天";
        }
        TimeSpan span = GetServerTime().Date - GetDateTime(time);
        if (span.Days == 0)
        {
            return "昨天";
        }
        else if (span.Days >= 999)
        {
            return "999天前";
        }
        else
        {
            return span.Days + "天前";
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章