using System;
using System.Text;
using UnityEngine;
[XLua.LuaCallCSharp]
public static class TimeUtility
{
private static DateTime s_ServerTime = DateTime.Now;
private static float _checkTime = 0;
///
/// 当前服务器时间
///
public static DateTime ServerNow
{
get
{
float tick = Time.realtimeSinceStartup - _checkTime;
DateTime real = s_ServerTime.AddSeconds(tick);
return real;
}
private set { s_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, 0, 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 DayOfWeek openServerDayOfWeek;
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 int CreateSeconds
{
get
{
return (ServerNow - createRoleTimeTail).Seconds;
}
}
public static event Action OnCreateRoleTimeRefresh;
public static void OnRefreshCreateRoleTime(HA124_tagMCPlayerInfo _package)
{
if (_package.socketType==ServerType.CrossSever)
{
return;
}
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)
{
if (vNetData.socketType == ServerType.CrossSever)
{
return;
}
DateTime n = new DateTime(vNetData.Year, vNetData.Month, vNetData.Day, vNetData.Hour, vNetData.Minute, vNetData.Second);
s_ServerTime = n;
DebugEx.Log("OnRefreshServerTime月份:" + s_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)
{
if (package.socketType == ServerType.CrossSever)
{
return;
}
OpenDay = package.Day;
IsMixServer = package.IsMixServer == 1;
MixOpenDay = package.MixDay;
openServerDayOfWeek = package.OpenWeekday == 7 ? DayOfWeek.Sunday : (DayOfWeek)package.OpenWeekday;
OnRefreshServerTime(new HA004_tagServerDateTime()
{
Year = package.NowYear,
Month = package.NowMonth,
Day = package.NowDay,
Hour = package.NowHour,
Minute = package.NowMinute,
Second = package.NowSecond,
MicSecond = package.NowMicSecond,
});
//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"));
}
}
}