少年修仙传客户端代码仓库
client_linchunjie
2018-08-27 d106f11e7f44c748f595da36e0cdfd54849649e6
Utility/TimeUtility.cs
@@ -1,267 +1,267 @@
using System;
using System.Text;
using UnityEngine;
public static class TimeUtility
{
    private static DateTime _serverTime = DateTime.Now;
    private static float _checkTime = 0;
    /// <summary>
    /// 当前服务器时间
    /// </summary>
    public static DateTime ServerNow {
        get {
            float tick = Time.realtimeSinceStartup - _checkTime;
            DateTime real = _serverTime.AddSeconds(tick);
            return real;
        }
        private set { _serverTime = value; }
    }
    /// <summary>
    /// 年份
    /// </summary>
    public static int Year {
        get { return ServerNow.Year; }
    }
    /// <summary>
    /// 月份
    /// </summary>
    public static int Month {
        get { return ServerNow.Month; }
    }
    /// <summary>
    /// 天
    /// </summary>
    public static int Day {
        get { return ServerNow.Day; }
    }
    /// <summary>
    /// 小时
    /// </summary>
    public static int Hour {
        get { return ServerNow.Hour; }
    }
    /// <summary>
    /// 分钟
    /// </summary>
    public static int Minute {
        get { return ServerNow.Minute; }
    }
    /// <summary>
    /// 秒
    /// </summary>
    public static int Second {
        get { return ServerNow.Second; }
    }
    /// <summary>
    /// 服务器起始时间
    /// </summary>
    public static readonly DateTime OriginalTime = new DateTime(1970, 1, 1, 8, 0, 0);
    public static readonly DateTime ClientOriginalTime = new DateTime(1, 1, 1, 12, 0, 0);
    /// <summary>
    /// 服务器时间相比起始时间的秒数(主要方便比较)
    /// </summary>
    public static int AllSeconds {
        get {
            TimeSpan t = ServerNow - OriginalTime;
            return t.Seconds;
        }
    }
    public static int OpenDay {
        get; private set;
    }
    public static bool IsMixServer {
        get; private set;
    }
    public static int MixOpenDay {
        get; private set;
    }
    public static int OpenWeekCnt
    {
        get
        {
            var _openDay = ServerNow.AddDays(-OpenDay);
            var _opendayOfWeek = _openDay.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)_openDay.DayOfWeek;
            _openDay = _openDay.AddDays(7 - _opendayOfWeek + 1);
            var _openTime = new DateTime(_openDay.Year, _openDay.Month, _openDay.Day, 0, 0, 0);
            var _total = Mathf.Max(0, (float)ServerNow.Subtract(_openTime).TotalDays);
            return Mathf.CeilToInt((float)_total / 7);
        }
    }
    static StringBuilder stringBuilder = new StringBuilder();
    public static DateTime createRoleTime { get; private set; }
    private static DateTime createRoleTimeTail = DateTime.Now;
    public static int CreateDays
    {
        get
        {
            return Mathf.CeilToInt((float)(ServerNow - createRoleTimeTail).TotalDays);
        }
    }
    public static event Action OnCreateRoleTimeRefresh;
    public static void OnRefreshCreateRoleTime(HA124_tagMCPlayerInfo _package)
    {
        createRoleTime = Convert.ToDateTime(UIHelper.GetTime(_package.CreateRoleTime));
        createRoleTimeTail = new DateTime(createRoleTime.Year, createRoleTime.Month, createRoleTime.Day);
        if (OnCreateRoleTimeRefresh != null)
        {
            OnCreateRoleTimeRefresh();
        }
        DesignDebug.LogFormat("CreateRoleTime {0}  CreateDays {1}", createRoleTimeTail, CreateDays);
    }
    public static event Action OnServerTimeRefresh;
    public static void OnRefreshServerTime(HA004_tagServerDateTime vNetData)
    {
        DateTime n = new DateTime(vNetData.Year, vNetData.Month, vNetData.Day, vNetData.Hour, vNetData.Minute, vNetData.Second);
        _serverTime = n;
        DesignDebug.Log("OnRefreshServerTime月份:"+_serverTime.Month);
        _checkTime = Time.realtimeSinceStartup;
        if (OnServerTimeRefresh != null) OnServerTimeRefresh();
        TimeDownMgr.Instance.Begin(TimeDownMgr.CoolTimeType.SyncServerTime, 60, (float tick) => {
            SyncServerTime();
        }, 60);
    }
    public static event Action OnServerOpenDayRefresh;
    public static void OnRefreshServerOpenDay(HA005_tagOpenServerDay package)
    {
        OpenDay = package.Day;
        IsMixServer = package.IsMixServer == 1;
        MixOpenDay = package.MixDay;
        if (OnServerOpenDayRefresh != null) {
            OnServerOpenDayRefresh();
        }
    }
    public static void SyncServerTime()
    {
        CA002_tagClientRequestServerTime pack = new CA002_tagClientRequestServerTime();
        GameNetSystem.Instance.SendInfo(pack);
    }
    /// <summary>
    /// 根据服务器下发的秒数获取时间
    /// </summary>
    /// <param name="seconds"></param>
    /// <returns></returns>
    public static DateTime GetTime(uint seconds)
    {
        DateTime d = OriginalTime.AddTicks(seconds * TimeSpan.TicksPerSecond);
        return d;
    }
    public static string SecondsToHMS(int _seconds)
    {
        int hours = _seconds / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    public static string SecondsToMS(int _seconds)
    {
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    public static string SecondsToDHMSCHS(int _seconds)
    {
        int days = _seconds / 86400;
        int hours = _seconds % 86400 / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(days > 0 ? days.ToString() : string.Empty,
            days > 0 ? Language.Get("L1074") : string.Empty, hours > 0 ? hours.ToString() : string.Empty,
            hours > 0 ? Language.Get("Hour") : string.Empty, mins > 0 ? mins.ToString() : string.Empty,
            mins > 0 ? Language.Get("Minute") : string.Empty, seconds > 0 ? seconds.ToString() : string.Empty,
            seconds > 0 ? Language.Get("RealmWin_Bewrite_35") : string.Empty);
    }
    public static string SecondsToTitleDHMS(int _seconds)
    {
        int days = _seconds / 86400;
        if (days > 0)
        {
            return StringUtility.Contact(days, Language.Get("L1074"));
        }
        int hours = _seconds % 86400 / 3600;
        if (hours > 0)
        {
            return StringUtility.Contact(hours, Language.Get("Hour"));
        }
        int mins = Mathf.CeilToInt(_seconds % 3600 / 60.0f);
        if (mins > 0)
        {
            return StringUtility.Contact(mins, Language.Get("Minute"));
        }
        return StringUtility.Contact(1, Language.Get("Minute"));
    }
    public static string SecondsToHMSCHSRetain(int _seconds, bool _hour = true, bool _min = true, bool _sec = true)
    {
        stringBuilder.Length = 0;
        int hours = _seconds / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        if (hours > 0 || _hour)
        {
            stringBuilder.Append(hours);
            stringBuilder.Append(Language.Get("Hour"));
        }
        if (mins > 0 || _min)
        {
            stringBuilder.Append(mins);
            stringBuilder.Append(Language.Get("Minute"));
        }
        if (seconds > 0 || _sec)
        {
            stringBuilder.Append(seconds);
            stringBuilder.Append(Language.Get("RealmWin_Bewrite_35"));
        }
        return stringBuilder.ToString();
    }
    public static string SecondsToDHMS(int _seconds)
    {
        int days = _seconds / 86400;
        int hours = _seconds % 86400 / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    public static string SecondsToConsumeRebate(int _seconds)
    {
        float days = (float)_seconds / 86400;
        float hours = (float)_seconds % 86400 / 3600;
        int mins = _seconds % 3600 / 60;
        float seconds = (float)_seconds % 60;
        if (days >= 1)
        {
            return StringUtility.Contact(Mathf.CeilToInt(days), Language.Get("L1074"));
        }
        else if (hours >= 1)
        {
            return StringUtility.Contact(Mathf.CeilToInt(hours), Language.Get("Hour"));
        }
        else if (mins >= 1)
        {
            return StringUtility.Contact(mins, Language.Get("Minute"), seconds, Language.Get("RealmWin_Bewrite_35"));
        }
        else
        {
            return StringUtility.Contact(seconds, Language.Get("RealmWin_Bewrite_35"));
        }
    }
}
using System;
using System.Text;
using UnityEngine;
public static class TimeUtility
{
    private static DateTime _serverTime = DateTime.Now;
    private static float _checkTime = 0;
    /// <summary>
    /// 当前服务器时间
    /// </summary>
    public static DateTime ServerNow {
        get {
            float tick = Time.realtimeSinceStartup - _checkTime;
            DateTime real = _serverTime.AddSeconds(tick);
            return real;
        }
        private set { _serverTime = value; }
    }
    /// <summary>
    /// 年份
    /// </summary>
    public static int Year {
        get { return ServerNow.Year; }
    }
    /// <summary>
    /// 月份
    /// </summary>
    public static int Month {
        get { return ServerNow.Month; }
    }
    /// <summary>
    /// 天
    /// </summary>
    public static int Day {
        get { return ServerNow.Day; }
    }
    /// <summary>
    /// 小时
    /// </summary>
    public static int Hour {
        get { return ServerNow.Hour; }
    }
    /// <summary>
    /// 分钟
    /// </summary>
    public static int Minute {
        get { return ServerNow.Minute; }
    }
    /// <summary>
    /// 秒
    /// </summary>
    public static int Second {
        get { return ServerNow.Second; }
    }
    /// <summary>
    /// 服务器起始时间
    /// </summary>
    public static readonly DateTime OriginalTime = new DateTime(1970, 1, 1, 8, 0, 0);
    public static readonly DateTime ClientOriginalTime = new DateTime(1, 1, 1, 12, 0, 0);
    /// <summary>
    /// 服务器时间相比起始时间的秒数(主要方便比较)
    /// </summary>
    public static int AllSeconds {
        get {
            TimeSpan t = ServerNow - OriginalTime;
            return t.Seconds;
        }
    }
    public static int OpenDay {
        get; private set;
    }
    public static bool IsMixServer {
        get; private set;
    }
    public static int MixOpenDay {
        get; private set;
    }
    public static int OpenWeekCnt
    {
        get
        {
            var _openDay = ServerNow.AddDays(-OpenDay);
            var _opendayOfWeek = _openDay.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)_openDay.DayOfWeek;
            _openDay = _openDay.AddDays(7 - _opendayOfWeek + 1);
            var _openTime = new DateTime(_openDay.Year, _openDay.Month, _openDay.Day, 0, 0, 0);
            var _total = Mathf.Max(0, (float)ServerNow.Subtract(_openTime).TotalDays);
            return Mathf.CeilToInt((float)_total / 7);
        }
    }
    static StringBuilder stringBuilder = new StringBuilder();
    public static DateTime createRoleTime { get; private set; }
    private static DateTime createRoleTimeTail = DateTime.Now;
    public static int CreateDays
    {
        get
        {
            return Mathf.CeilToInt((float)(ServerNow - createRoleTimeTail).TotalDays);
        }
    }
    public static event Action OnCreateRoleTimeRefresh;
    public static void OnRefreshCreateRoleTime(HA124_tagMCPlayerInfo _package)
    {
        createRoleTime = Convert.ToDateTime(UIHelper.GetTime(_package.CreateRoleTime));
        createRoleTimeTail = new DateTime(createRoleTime.Year, createRoleTime.Month, createRoleTime.Day);
        if (OnCreateRoleTimeRefresh != null)
        {
            OnCreateRoleTimeRefresh();
        }
        DebugEx.LogFormat("CreateRoleTime {0}  CreateDays {1}", createRoleTimeTail, CreateDays);
    }
    public static event Action OnServerTimeRefresh;
    public static void OnRefreshServerTime(HA004_tagServerDateTime vNetData)
    {
        DateTime n = new DateTime(vNetData.Year, vNetData.Month, vNetData.Day, vNetData.Hour, vNetData.Minute, vNetData.Second);
        _serverTime = n;
        DebugEx.Log("OnRefreshServerTime月份:"+_serverTime.Month);
        _checkTime = Time.realtimeSinceStartup;
        if (OnServerTimeRefresh != null) OnServerTimeRefresh();
        TimeDownMgr.Instance.Begin(TimeDownMgr.CoolTimeType.SyncServerTime, 60, (float tick) => {
            SyncServerTime();
        }, 60);
    }
    public static event Action OnServerOpenDayRefresh;
    public static void OnRefreshServerOpenDay(HA005_tagOpenServerDay package)
    {
        OpenDay = package.Day;
        IsMixServer = package.IsMixServer == 1;
        MixOpenDay = package.MixDay;
        if (OnServerOpenDayRefresh != null) {
            OnServerOpenDayRefresh();
        }
    }
    public static void SyncServerTime()
    {
        CA002_tagClientRequestServerTime pack = new CA002_tagClientRequestServerTime();
        GameNetSystem.Instance.SendInfo(pack);
    }
    /// <summary>
    /// 根据服务器下发的秒数获取时间
    /// </summary>
    /// <param name="seconds"></param>
    /// <returns></returns>
    public static DateTime GetTime(uint seconds)
    {
        DateTime d = OriginalTime.AddTicks(seconds * TimeSpan.TicksPerSecond);
        return d;
    }
    public static string SecondsToHMS(int _seconds)
    {
        int hours = _seconds / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    public static string SecondsToMS(int _seconds)
    {
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    public static string SecondsToDHMSCHS(int _seconds)
    {
        int days = _seconds / 86400;
        int hours = _seconds % 86400 / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(days > 0 ? days.ToString() : string.Empty,
            days > 0 ? Language.Get("L1074") : string.Empty, hours > 0 ? hours.ToString() : string.Empty,
            hours > 0 ? Language.Get("Hour") : string.Empty, mins > 0 ? mins.ToString() : string.Empty,
            mins > 0 ? Language.Get("Minute") : string.Empty, seconds > 0 ? seconds.ToString() : string.Empty,
            seconds > 0 ? Language.Get("RealmWin_Bewrite_35") : string.Empty);
    }
    public static string SecondsToTitleDHMS(int _seconds)
    {
        int days = _seconds / 86400;
        if (days > 0)
        {
            return StringUtility.Contact(days, Language.Get("L1074"));
        }
        int hours = _seconds % 86400 / 3600;
        if (hours > 0)
        {
            return StringUtility.Contact(hours, Language.Get("Hour"));
        }
        int mins = Mathf.CeilToInt(_seconds % 3600 / 60.0f);
        if (mins > 0)
        {
            return StringUtility.Contact(mins, Language.Get("Minute"));
        }
        return StringUtility.Contact(1, Language.Get("Minute"));
    }
    public static string SecondsToHMSCHSRetain(int _seconds, bool _hour = true, bool _min = true, bool _sec = true)
    {
        stringBuilder.Length = 0;
        int hours = _seconds / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        if (hours > 0 || _hour)
        {
            stringBuilder.Append(hours);
            stringBuilder.Append(Language.Get("Hour"));
        }
        if (mins > 0 || _min)
        {
            stringBuilder.Append(mins);
            stringBuilder.Append(Language.Get("Minute"));
        }
        if (seconds > 0 || _sec)
        {
            stringBuilder.Append(seconds);
            stringBuilder.Append(Language.Get("RealmWin_Bewrite_35"));
        }
        return stringBuilder.ToString();
    }
    public static string SecondsToDHMS(int _seconds)
    {
        int days = _seconds / 86400;
        int hours = _seconds % 86400 / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    public static string SecondsToConsumeRebate(int _seconds)
    {
        float days = (float)_seconds / 86400;
        float hours = (float)_seconds % 86400 / 3600;
        int mins = _seconds % 3600 / 60;
        float seconds = (float)_seconds % 60;
        if (days >= 1)
        {
            return StringUtility.Contact(Mathf.CeilToInt(days), Language.Get("L1074"));
        }
        else if (hours >= 1)
        {
            return StringUtility.Contact(Mathf.CeilToInt(hours), Language.Get("Hour"));
        }
        else if (mins >= 1)
        {
            return StringUtility.Contact(mins, Language.Get("Minute"), seconds, Language.Get("RealmWin_Bewrite_35"));
        }
        else
        {
            return StringUtility.Contact(seconds, Language.Get("RealmWin_Bewrite_35"));
        }
    }
}