You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
5.4 KiB
196 lines
5.4 KiB
using System;
|
|
using IVDataFormat;
|
|
|
|
// 타임 스케일 무시한 대기 시간 관리.
|
|
public class TimeUtils
|
|
{
|
|
public const int DAY1 = 86400;
|
|
public const int DAY2 = 172800;
|
|
public const int DAY3 = 259200;
|
|
public const int DAY4 = 345600;
|
|
public const int DAY5 = 432000;
|
|
public const int DAY6 = 518400;
|
|
|
|
protected static DateTime DT_Device = DateTime.UtcNow;
|
|
protected static DateTime DT_Now = DateTime.UtcNow;
|
|
// 다음날(다음 갱신 시간). 한국 시간 오전 10시 기준.
|
|
protected static DateTime DT_NextDay = DT_Now;
|
|
protected static DateTime DT_NextWeek = DT_Now;
|
|
protected static DateTime DT_NextMonth = DT_Now;
|
|
|
|
protected static int I_Locale = (int)((DateTime.Now - DateTime.UtcNow).TotalHours + 0.4d);
|
|
public static int NextDaySec = DAY1;
|
|
protected static int NextDayRandDelay = 0;
|
|
|
|
public static int GetLocale()
|
|
{
|
|
return I_Locale;
|
|
}
|
|
|
|
public static fDays GetCurDays()
|
|
{
|
|
switch (NowLocal().DayOfWeek)
|
|
{
|
|
case DayOfWeek.Sunday:
|
|
return fDays.Sunday;
|
|
case DayOfWeek.Monday:
|
|
return fDays.Monday;
|
|
case DayOfWeek.Tuesday:
|
|
return fDays.Tuesday;
|
|
case DayOfWeek.Wednesday:
|
|
return fDays.Wednesday;
|
|
case DayOfWeek.Thursday:
|
|
return fDays.Thursday;
|
|
case DayOfWeek.Friday:
|
|
return fDays.Friday;
|
|
case DayOfWeek.Saturday:
|
|
return fDays.Saturday;
|
|
default:
|
|
return fDays.None;
|
|
}
|
|
}
|
|
|
|
public static DateTime Now()
|
|
{
|
|
return DateTime.UtcNow;
|
|
}
|
|
|
|
public static DateTime NowLocal()
|
|
{
|
|
return DateTime.UtcNow.AddHours(9d);
|
|
}
|
|
|
|
// 다음 날.
|
|
public static DateTime NextDay()
|
|
{
|
|
return DT_NextDay;
|
|
}
|
|
|
|
public static DateTime ToUTCTime(DateTime datetime)
|
|
{
|
|
return datetime.AddHours(-9d);
|
|
}
|
|
|
|
public static DateTime ToLocalTime(DateTime datetime)
|
|
{
|
|
return datetime.AddHours(9d);
|
|
}
|
|
|
|
public static void SaveDeviceTime()
|
|
{
|
|
DT_Device = DateTime.UtcNow;
|
|
}
|
|
|
|
public static double ReCalcNow()
|
|
{
|
|
DateTime nowdevice = DateTime.UtcNow;
|
|
TimeSpan ts = nowdevice - DT_Device;
|
|
if (nowdevice <= DT_Device)
|
|
return ts.TotalSeconds;
|
|
|
|
DT_Now = DT_Now.AddSeconds(ts.TotalSeconds);
|
|
NextDaySec = (int)(DT_NextDay - DT_Now).TotalSeconds;
|
|
DT_Device = nowdevice;
|
|
|
|
if (DT_Now > DT_NextDay)
|
|
{
|
|
CalcNextDay();
|
|
CalcNextWeek();
|
|
CalcNextMonth();
|
|
NextDaySec = (int)(DT_NextDay - DT_Now).TotalSeconds;
|
|
SingleMgr.ProcessNewDay();
|
|
}
|
|
return ts.TotalSeconds;
|
|
}
|
|
|
|
public static void AddNowSec1()
|
|
{
|
|
DT_Now = DT_Now.AddSeconds(1d);
|
|
NextDaySec--;
|
|
if (NextDaySec <= 0)
|
|
{
|
|
CalcNextDay();
|
|
CalcNextWeek();
|
|
CalcNextMonth();
|
|
NextDaySec = (int)(DT_NextDay - DT_Now).TotalSeconds;
|
|
SingleMgr.ProcessNewDay();
|
|
}
|
|
}
|
|
|
|
public static void AddNowSec(double time)
|
|
{
|
|
DT_Now = DT_Now.AddSeconds(time);
|
|
NextDaySec = (int)(DT_NextDay - DT_Now).TotalSeconds;
|
|
if (DT_Now > DT_NextDay)
|
|
{
|
|
CalcNextDay();
|
|
CalcNextWeek();
|
|
CalcNextMonth();
|
|
NextDaySec = (int)(DT_NextDay - DT_Now).TotalSeconds;
|
|
SingleMgr.ProcessNewDay();
|
|
}
|
|
}
|
|
|
|
// 다음날까지 남은 시간. 한국 시간 오전 10시 기준.
|
|
public static TimeSpan ToNextDayRemain()
|
|
{
|
|
return new TimeSpan(0, 0, NextDaySec);
|
|
}
|
|
|
|
// 다음주. 한국 시간 오전 10시 기준.
|
|
private static void CalcNextDay()
|
|
{
|
|
DT_NextDay = DateTime.UtcNow.AddHours(-1d).AddDays(1d).Date.AddHours(1d).AddSeconds(NextDayRandDelay);
|
|
}
|
|
|
|
// 다음 날. 한국 시간 오전 10시 기준.
|
|
public static DateTime NextDayUtc()
|
|
{
|
|
return DT_NextDay;
|
|
}
|
|
|
|
// 다음주(월요일). 한국 시간 오전 10시 기준.
|
|
private static void CalcNextWeek()
|
|
{
|
|
DateTime dtnow = Now().AddHours(-1d);
|
|
int idaystoadd = ((int)DayOfWeek.Monday - (int)dtnow.DayOfWeek + 7) % 7;
|
|
if (idaystoadd == 0)
|
|
idaystoadd = 7;
|
|
DT_NextWeek = dtnow.AddDays(idaystoadd).Date.AddHours(1d).AddSeconds(NextDayRandDelay);
|
|
}
|
|
|
|
// 다음주(월요일). 한국 시간 오전 10시 기준.
|
|
public static DateTime NextWeekUtc()
|
|
{
|
|
return DT_NextWeek;
|
|
}
|
|
|
|
// 다음달(1일). 한국 시간 오전 10시 기준.
|
|
private static void CalcNextMonth()
|
|
{
|
|
DateTime dtnow = Now().AddHours(-1d);
|
|
DT_NextMonth = new DateTime(dtnow.AddMonths(1).Year, dtnow.AddMonths(1).Month, 1).AddHours(1d).AddSeconds(NextDayRandDelay);
|
|
}
|
|
|
|
// 다음달(1일). 한국 시간 오전 10시 기준.
|
|
public static DateTime NextMonthUtc()
|
|
{
|
|
return DT_NextMonth;
|
|
}
|
|
|
|
public static void SetNetworkTime(DateTime datetime)
|
|
{
|
|
#if UNITY_EDITOR
|
|
datetime = DateTime.UtcNow;
|
|
#endif
|
|
if (datetime == null || datetime.Equals(DateTime.MinValue))
|
|
return;
|
|
|
|
NextDayRandDelay = UnityEngine.Random.Range(0, 10);
|
|
DT_Now = datetime;
|
|
CalcNextDay();
|
|
CalcNextWeek();
|
|
CalcNextMonth();
|
|
NextDaySec = (int)(DT_NextDay - DT_Now).TotalSeconds;
|
|
}
|
|
}
|