hch
2026-03-20 c8aea6cbef51b3dd41b4d911bc7e6bf89a6e2e2d
Main/Utility/TimeUtility.cs
@@ -100,6 +100,15 @@
        }
    }
    public static int AllSecondsCrossServer
    {
        get
        {
            TimeSpan t = CrossServerNow - OriginalTime;
            return (int)t.TotalSeconds;
        }
    }
    //1年中的第几周,以服务端为准,python和c#算出来不一样
    public static int WeekOfYear
    {
@@ -117,6 +126,12 @@
    }
    public static int MixOpenDay
    {
        get; private set;
    }
    //开服时间戳
    public static int openServerTick
    {
        get; private set;
    }
@@ -159,18 +174,16 @@
    }
    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();
    //     }
    //     Debug.LogFormat("CreateRoleTime {0}  CreateDays {1}", createRoleTimeTail, CreateDays);
    // }
    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();
        }
        Debug.LogFormat("CreateRoleTime {0}  CreateDays {1}", createRoleTimeTail, CreateDays);
    }
    public static event Action OnServerTimeRefresh;
    public static void OnRefreshServerTime(HA004_tagServerDateTime vNetData)
@@ -184,8 +197,11 @@
            OnServerTimeRefresh();
        }
        s_CrossServerTime = Convert.ToDateTime(vNetData.CrossServerTime);
        _crossCheckTime = Time.realtimeSinceStartup;
        if (!string.IsNullOrEmpty(vNetData.CrossServerTime))
        {
            s_CrossServerTime = Convert.ToDateTime(vNetData.CrossServerTime);
            _crossCheckTime = Time.realtimeSinceStartup;
        }
        TimeDownMgr.Instance.Begin(TimeDownMgr.CoolTimeType.SyncServerTime, 60, (float tick) =>
        {
@@ -194,15 +210,14 @@
    }
    public static event Action OnServerOpenDayRefresh;
    public static void OnRefreshServerOpenDay(HA005_tagOpenServerDay package)
    public static void OnRefreshServerOpenDay(HA103_tagMCOpenServerDay package)
    {
        {
            OpenDay = package.Day;
            IsMixServer = package.IsMixServer == 1;
            MixOpenDay = package.MixDay;
            openServerDayOfWeek = package.OpenWeekday == 7 ? DayOfWeek.Sunday : (DayOfWeek)package.OpenWeekday;
            WeekOfYear = package.WeekOfYear;
        }
        OpenDay = package.Day;
        IsMixServer = package.IsMixServer == 1;
        MixOpenDay = package.MixDay;
        openServerDayOfWeek = package.OpenWeekday == 7 ? DayOfWeek.Sunday : (DayOfWeek)package.OpenWeekday;
        WeekOfYear = package.WeekOfYear;
        openServerTick = (int)package.OpenServerTime;
        OnRefreshServerTime(new HA004_tagServerDateTime()
        {
@@ -249,7 +264,7 @@
        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"));
        return StringUtility.Concat(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
@@ -264,15 +279,15 @@
        int seconds = _seconds % 60;
        if (hours > 0)
        {
            return StringUtility.Contact(hours, Language.Get("L1072"), mins, Language.Get("L1073"), seconds, Language.Get("L1075"));
            return StringUtility.Concat(hours.ToString(), Language.Get("L1072"), mins.ToString(), Language.Get("L1073"), seconds.ToString(), Language.Get("L1075"));
        }
        else if (mins > 0)
        {
            return StringUtility.Contact(mins, Language.Get("L1073"), seconds, Language.Get("L1075"));
            return StringUtility.Concat(mins.ToString(), Language.Get("L1073"), seconds.ToString(), Language.Get("L1075"));
        }
        else
        {
            return StringUtility.Contact(seconds, Language.Get("L1075"));
            return StringUtility.Concat(seconds.ToString(), Language.Get("L1075"));
        }
    }
@@ -283,7 +298,7 @@
    {
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(mins.ToString("D2"), ":", seconds.ToString("D2"));
        return StringUtility.Concat(mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    //例子;不足的不显示 如0天0:xx:xx:,显示为xx:xx
@@ -294,7 +309,7 @@
        int hours = _seconds % 86400 / 3600;
        int mins = _seconds % 3600 / 60;
        int seconds = _seconds % 60;
        return StringUtility.Contact(days > 0 ? days.ToString() : string.Empty,
        return StringUtility.Concat(days > 0 ? days.ToString() : string.Empty,
            days > 0 ? Language.Get("L1074") + " " : string.Empty, hours > 0 ? hours.ToString() : string.Empty,
            hours > 0 ? ":" : string.Empty, mins >= 0 ? mins.ToString("D2") : string.Empty,
            mins >= 0 ? ":" : string.Empty, seconds >= 0 ? seconds.ToString("D2") : string.Empty,
@@ -311,19 +326,19 @@
        int days = _seconds / 86400;
        if (days > 0)
        {
            return StringUtility.Contact(days, Language.Get("L1074"));
            return StringUtility.Concat(days.ToString(), Language.Get("L1074"));
        }
        int hours = _seconds % 86400 / 3600;
        if (hours > 0)
        {
            return StringUtility.Contact(hours, Language.Get("Hour"));
            return StringUtility.Concat(hours.ToString(), Language.Get("Hour"));
        }
        int mins = Mathf.CeilToInt(_seconds % 3600 / 60.0f);
        if (mins > 0)
        {
            return StringUtility.Contact(mins, Language.Get("Minute"));
            return StringUtility.Concat(mins.ToString(), Language.Get("Minute"));
        }
        return StringUtility.Contact(1, Language.Get("Minute"));
        return StringUtility.Concat("1", Language.Get("Minute"));
    }
@@ -364,9 +379,9 @@
        int seconds = _seconds % 60;
        if (days > 0)
        {
            return StringUtility.Contact(days, Language.Get("L1074"), " ", hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
            return StringUtility.Concat(days.ToString(), Language.Get("L1074"), " ", hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
        }
        return StringUtility.Contact(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
        return StringUtility.Concat(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    //极简显示
@@ -384,23 +399,23 @@
        {
            if (hours == 0)
            {
                return StringUtility.Contact(days, Language.Get("L1074"));
                return StringUtility.Concat(days.ToString(), Language.Get("L1074"));
            }
            return StringUtility.Contact(days, Language.Get("L1074"), hours, Language.Get("L1072"));
            return StringUtility.Concat(days.ToString(), Language.Get("L1074"), hours.ToString(), Language.Get("L1072"));
        }
        else if (hours > 0)
        {
            if (mins == 0)
            {
                return StringUtility.Contact(hours, Language.Get("L1072"));
                return StringUtility.Concat(hours.ToString(), Language.Get("L1072"));
            }
            return StringUtility.Contact(hours, Language.Get("L1072"), mins, Language.Get("L1073"));
            return StringUtility.Concat(hours.ToString(), Language.Get("L1072"), mins.ToString(), Language.Get("L1073"));
        }
        else if (mins > 0)
        {
            return StringUtility.Contact(mins, Language.Get("L1073"));
        {
            return StringUtility.Concat(mins.ToString(), Language.Get("L1073"));
        }
        return StringUtility.Contact(seconds, Language.Get("L1075"));
        return StringUtility.Concat(seconds.ToString(), Language.Get("L1075"));
    }
@@ -416,18 +431,18 @@
        int seconds = _seconds % 60;
        if (days > 0)
        {
            return StringUtility.Contact(days, Language.Get("L1074"), hours.ToString("D2"), Language.Get("L1072"), mins.ToString("D2"), Language.Get("L1073"));
            return StringUtility.Concat(days.ToString(), Language.Get("L1074"), hours.ToString("D2"), Language.Get("L1072"), mins.ToString("D2"), Language.Get("L1073"));
        }
        return StringUtility.Contact(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
        return StringUtility.Concat(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
    }
    //例子
    //例子 天和小时 向上取整 如1天1小时 显示为2天
    //x天
    //x时
    //x分
    //x秒
    public static string SecondsToConsumeRebate(int _seconds)
    public static string SecondsToOnlyTime(int _seconds)
    {
        float days = (float)_seconds / 86400;
        float hours = (float)_seconds % 86400 / 3600;
@@ -435,19 +450,19 @@
        float seconds = (float)_seconds % 60;
        if (days >= 1)
        {
            return StringUtility.Contact(Mathf.CeilToInt(days), Language.Get("L1074"));
            return StringUtility.Concat(Mathf.CeilToInt(days).ToString(), Language.Get("L1074"));
        }
        else if (hours >= 1)
        {
            return StringUtility.Contact(Mathf.CeilToInt(hours), Language.Get("L1072"));
            return StringUtility.Concat(Mathf.CeilToInt(hours).ToString(), Language.Get("L1072"));
        }
        else if (mins >= 1)
        {
            return StringUtility.Contact(mins, Language.Get("L1073"));
            return StringUtility.Concat(mins.ToString(), Language.Get("L1073"));
        }
        else
        {
            return StringUtility.Contact(seconds, Language.Get("L1075"));
            return StringUtility.Concat(seconds.ToString(), Language.Get("L1075"));
        }
    }
@@ -469,6 +484,12 @@
    {
        var now = ServerNow;
        return new DateTime(now.Year, now.Month, now.Day);
    }
    public static int GetTodayStartTick()
    {
        var now = ServerNow;
        return (int)(GetTodayStartTime() - OriginalTime).TotalSeconds;
    }
    /// <summary>
@@ -496,13 +517,13 @@
    }
    // 到10点还要多少秒,如果已经过了10点,返回0
    public static int GetToTenClockSeconds()
    // 今日到x点还要多少秒,如果已经过了x点,返回0
    public static int GetToTheHourSeconds(int hour = 10)
    {
        var now = ServerNow;
        if (now.Hour < 10)
        if (now.Hour < hour)
        {
            return (int)(ServerNow - new DateTime(now.Year, now.Month, now.Day, 10, 0, 0)).TotalSeconds;
            return (int)(new DateTime(now.Year, now.Month, now.Day, hour, 0, 0) - ServerNow).TotalSeconds;
        }
        return 0;
    }
@@ -532,4 +553,56 @@
    {
        return (int)(GetTodayEndTime() - ServerNow).TotalSeconds;
    }
    #region 跨服和本服公用接口
    //当有的功能会从本服功能变成跨服功能的时候统一用这些接口处理时间
    //各自的功能传自己的zoneID
    // 获取当前时间, 公会跨区前取本服时间,跨服后取跨服时间
    public static DateTime GetCommServerNow(int zoneID = 0)
    {
        if (zoneID == 0)
        {
            return ServerNow;
        }
        else
        {
            return CrossServerNow;
        }
    }
    public static int GetCommServerTick(int zoneID = 0)
    {
        if (zoneID == 0)
        {
            return AllSeconds;
        }
        else
        {
            return AllSecondsCrossServer;
        }
    }
    public static DateTime GetCommTodayEndTime(int zoneID = 0)
    {
        var now = GetCommServerNow(zoneID).AddDays(1);
        return new DateTime(now.Year, now.Month, now.Day);
    }
    //获取当前周几,1-7
    public static int GetCommonWeekday(int zoneID = 0)
    {
        var day = GetCommServerNow(zoneID).DayOfWeek;
        return day == DayOfWeek.Sunday ? 7 : (int)day;
    }
    //本周结束时间 秒
    public static int GetCommonWeekEndTime(int zoneID = 0)
    {
        var now = GetCommServerNow(zoneID);
        var weekDay = GetCommonWeekday(zoneID);
        var endDay = now.AddDays(7 - weekDay + 1);
        return (int)(new DateTime(endDay.Year, endDay.Month, endDay.Day) - now).TotalSeconds;
    }
    #endregion
}