using System; using System.Text; using UnityEngine; public static class TimeUtility { private static DateTime _serverTime = DateTime.Now; private static float _checkTime = 0; /// /// 当前服务器时间 /// public static DateTime ServerNow { get { float tick = Time.realtimeSinceStartup - _checkTime; DateTime real = _serverTime.AddSeconds(tick); return real; } private set { _serverTime = value; } } /// /// 年份 /// public static int Year { get { return ServerNow.Year; } } /// /// 月份 /// public static int Month { get { return ServerNow.Month; } } /// /// 天 /// public static int Day { get { return ServerNow.Day; } } /// /// 小时 /// public static int Hour { get { return ServerNow.Hour; } } /// /// 分钟 /// public static int Minute { get { return ServerNow.Minute; } } /// /// 秒 /// public static int Second { get { return ServerNow.Second; } } /// /// 服务器起始时间 /// 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); /// /// 服务器时间相比起始时间的秒数(主要方便比较) /// 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 DateTime openServerTime; 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; DateTime.TryParse(package.OpenServerTime, out openServerTime); if (OnServerOpenDayRefresh != null) { OnServerOpenDayRefresh(); } } public static void SyncServerTime() { CA002_tagClientRequestServerTime pack = new CA002_tagClientRequestServerTime(); GameNetSystem.Instance.SendInfo(pack); } /// /// 根据服务器下发的秒数获取时间 /// /// /// 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")); } } }