132 lines
3.8 KiB
C#
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;
|
|
}
|
|
}
|