OvertakingLegend/Assets/Script/Tool/TimeManager.cs

132 lines
3.8 KiB
C#
Raw Permalink Normal View History

2025-03-24 03:08:22 +00:00
using System;
using UnityEngine;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public enum E_MoreThanType
{
/// <summary>
/// <20><><EFBFBD><EFBFBD>
/// </summary>
MS,
/// <summary>
/// ʱ<><CAB1><EFBFBD><EFBFBD>
/// </summary>
HMS,
/// <summary>
/// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
/// </summary>
DHMS,
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
/// </summary>
public enum E_IntervalType
{
/// <summary>
/// <20><>
/// </summary>
D,
/// <summary>
/// ʱ
/// </summary>
H,
/// <summary>
/// <20><>
/// </summary>
M,
/// <summary>
/// <20><>
/// </summary>
S,
}
/// <summary>
/// ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public class TimeManager : SingletonManager<TimeManager>
{
/// <summary>
/// <20><><EFBFBD><EFBFBD>long<6E>õ<EFBFBD><C3B5><EFBFBD>ʾʱ<CABE><CAB1>
/// </summary>
/// <param name="timestamp"></param>
/// <returns></returns>
public DateTime GetDateTimeSeconds(long timestamp)
{
long begtime = timestamp * 10000000;
DateTime dt_1970 = new DateTime(1970, 1, 1, 8, 0, 0);
long tricks_1970 = dt_1970.Ticks;//1970<37><30>1<EFBFBD><31>1<EFBFBD>տ̶<D5BF>
long time_tricks = tricks_1970 + begtime;//<2F><>־<EFBFBD><D6BE><EFBFBD>ڿ̶<DABF>
DateTime dt = new DateTime(time_tricks);//ת<><D7AA>ΪDateTime
return dt;
}
/// <summary>
/// <20>õ<EFBFBD> long
/// </summary>
/// <returns></returns>
public long GetTimeSpan()
{
TimeSpan timeStamp = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(timeStamp.TotalSeconds);
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="startTimer"><3E><>ʼʱ<CABC><CAB1></param>
/// <param name="endTimer"><3E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1></param>
/// <returns></returns>
public T GetSubSeconds<T>(DateTime startTimer, DateTime endTimer, E_IntervalType e_IntervalType) where T : struct
{
TimeSpan startSpan = new TimeSpan(startTimer.Ticks);
TimeSpan nowSpan = new TimeSpan(endTimer.Ticks);
TimeSpan subTimer = nowSpan.Subtract(startSpan).Duration();
T time = default(T);
switch (e_IntervalType)
{
case E_IntervalType.D:
time = (T)Convert.ChangeType(subTimer.Days, typeof(T));
break;
case E_IntervalType.H:
time = (T)Convert.ChangeType(subTimer.Hours, typeof(T));
break;
case E_IntervalType.M:
time = (T)Convert.ChangeType(subTimer.TotalMinutes, typeof(T));
break;
case E_IntervalType.S:
time = (T)Convert.ChangeType(subTimer.TotalSeconds, typeof(T));
break;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ֡<CFB7>ʱ<EFBFBD>IJ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return time;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EBBBBB><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>ʽ
/// </summary>
public string ConversionTable(float second, E_MoreThanType e_MoreThan)//<2F><><EFBFBD><EFBFBD>ʱ
{
string time = "";
int d = Mathf.FloorToInt(second / 86400); // 1<><31> = 86400<30><30>
int h = Mathf.FloorToInt(second / 3600); //<2F><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1> һСʱΪ3600<30><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3600ȡ<30><C8A1><EFBFBD><EFBFBD>ΪСʱ
int m = Mathf.FloorToInt(second % 3600 / 60); //һ<><D2BB><EFBFBD><EFBFBD>Ϊ60<36><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3600ȡ<30><C8A1><EFBFBD>ٶ<EFBFBD>60ȡ<30><C8A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
float s = Mathf.FloorToInt(second % 3600 % 60);//<2F><>3600ȡ<30><C8A1><EFBFBD>ٶ<EFBFBD>60ȡ<30>༴Ϊ<E0BCB4><CEAA><EFBFBD><EFBFBD>
switch (e_MoreThan)
{
case E_MoreThanType.MS:
time = m + ":" + s.ToString("00");//<2F><><EFBFBD><EFBFBD>00:00ʱ<30><CAB1><EFBFBD><EFBFBD>ʽ
break;
case E_MoreThanType.HMS:
time = h + ":" + m + ":" + s.ToString("00");//<2F><><EFBFBD><EFBFBD>00:00:00ʱ<30><CAB1><EFBFBD><EFBFBD>ʽ
break;
case E_MoreThanType.DHMS:
time = d + ":" + h + ":" + m + ":" + s.ToString("00");//<2F><><EFBFBD><EFBFBD>00:00:00ʱ<30><CAB1><EFBFBD><EFBFBD>ʽ
break;
}
return time;
}
}