OvertakingLegend/Assets/Script/Tool/TimeManager.cs

132 lines
3.8 KiB
C#

using System;
using UnityEngine;
/// <summary>
/// 间隔类型
/// </summary>
public enum E_MoreThanType
{
/// <summary>
/// 分秒
/// </summary>
MS,
/// <summary>
/// 时分秒
/// </summary>
HMS,
/// <summary>
/// 天时分秒
/// </summary>
DHMS,
}
/// <summary>
/// 间隔时间
/// </summary>
public enum E_IntervalType
{
/// <summary>
/// 天
/// </summary>
D,
/// <summary>
/// 时
/// </summary>
H,
/// <summary>
/// 分
/// </summary>
M,
/// <summary>
/// 秒
/// </summary>
S,
}
/// <summary>
/// 时间管理器
/// </summary>
public class TimeManager : SingletonManager<TimeManager>
{
/// <summary>
/// 根据long得到显示时间
/// </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年1月1日刻度
long time_tricks = tricks_1970 + begtime;//日志日期刻度
DateTime dt = new DateTime(time_tricks);//转化为DateTime
return dt;
}
/// <summary>
/// 得到 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>
/// 获取间隔秒数
/// </summary>
/// <param name="startTimer">开始时间</param>
/// <param name="endTimer">结束时间</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;
}
//返回相差时长(算上分、时的差值,返回相差的总秒数)
return time;
}
/// <summary>
/// 将秒换算成钟表格式
/// </summary>
public string ConversionTable(float second, E_MoreThanType e_MoreThan)//倒计时
{
string time = "";
int d = Mathf.FloorToInt(second / 86400); // 1天 = 86400秒
int h = Mathf.FloorToInt(second / 3600); //秒数取整 一小时为3600秒 秒数对3600取整即为小时
int m = Mathf.FloorToInt(second % 3600 / 60); //一分钟为60秒 秒数对3600取余再对60取整即为分钟
float s = Mathf.FloorToInt(second % 3600 % 60);//对3600取余再对60取余即为秒数
switch (e_MoreThan)
{
case E_MoreThanType.MS:
time = m + ":" + s.ToString("00");//返回00:00时间格式
break;
case E_MoreThanType.HMS:
time = h + ":" + m + ":" + s.ToString("00");//返回00:00:00时间格式
break;
case E_MoreThanType.DHMS:
time = d + ":" + h + ":" + m + ":" + s.ToString("00");//返回00:00:00时间格式
break;
}
return time;
}
}