开发过程中经常会遇到获取时间戳的需求,
using System;
public class TimeHelper
{
public enum _TimeType
{
Millisecond, //毫秒
Second, //秒
Minute, //分钟
Hour, //小时
Day //天
}
//当地时区的开始时间,例如1970, 1, 1 00:00:00 是格林威治的开始时间,但是对北京来说是1970, 1, 1 08:00:00
static DateTime _startTime;
static DateTime startTime
{
get
{
//由于DateTime为结构体类型
//所以声明一个DateTime对象后,默认值不为null,而是0001/1/1 0:00:00
//所以此处用_startTime==1判断而不是_startTime==null
if (_startTime.Year==1)
{
_startTime = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(1970, 1, 1), TimeZoneInfo.Local);
}
return _startTime;
}
}
/// <summary>
/// 获取时间戳Timestamp
/// </summary>
/// <returns></returns>
public static double GetTimestampOfNow(_TimeType timeType = _TimeType.Second)
{
//根据当地的时区获取对应当地的格林威治时间
//计算时间差
TimeSpan timeSpan = DateTime.Now - startTime;
double timestamp = 0;
switch (timeType)
{
case _TimeType.Millisecond:
timestamp = timeSpan.TotalMilliseconds;
break;
case _TimeType.Second:
timestamp = Math.Round(timeSpan.TotalSeconds, 0); //取时间 秒 且不要小数
break;
case _TimeType.Minute:
timestamp = Math.Round(timeSpan.TotalMinutes, 0);
break;
case _TimeType.Hour:
timestamp = Math.Round(timeSpan.TotalHours, 0);
break;
case _TimeType.Day:
timestamp = Math.Round(timeSpan.TotalDays, 0);
break;
}
return timestamp;
}
/// 时间戳转为C#格式时间
/// </summary>
/// <param name=”timeStamp”></param>
/// <returns></returns>
public static DateTime GetTimeWithTimeSpan(double timeDif, _TimeType timeType = _TimeType.Second)
{
switch (timeType)
{
case _TimeType.Millisecond:
return startTime.AddMilliseconds((int)timeDif);
case _TimeType.Second:
return startTime.AddSeconds(timeDif);
case _TimeType.Minute:
return startTime.AddMinutes(timeDif);
case _TimeType.Hour:
return startTime.AddHours(timeDif);
case _TimeType.Day:
return startTime.AddDays(timeDif);
}
return startTime;
}
/// <summary>
/// 获取当前时间戳精确到毫秒
/// </summary>
/// <returns></returns>
public static double GetTimestampOfNowWithMillisecond()
{
return (DateTime.Now - startTime).TotalMilliseconds;
}
/// <summary>
/// 获取当前时间戳精确到秒
/// </summary>
/// <returns></returns>
public static double GetTimestampOfNowWithSecond()
{
return (DateTime.Now - startTime).TotalSeconds;
}
/// <summary>
/// 获取当前时间戳精确到分钟
/// </summary>
/// <returns></returns>
public static double GetTimestampOfNowWithMinute()
{
return (DateTime.Now - startTime).TotalMinutes;
}
/// <summary>
/// 获取当前时间戳精确到小时
/// </summary>
/// <returns></returns>
public static double GetTimestampOfNowWithHour()
{
return (DateTime.Now - startTime).TotalHours;
}
/// <summary>
/// 获取当前时间戳精确到天
/// </summary>
/// <returns></returns>
public static double GetTimestampOfNowWithDay()
{
return (DateTime.Now - startTime).TotalDays;
}
}
演示:
void Start()
{
double dTime = TimeHelper.GetTimestampOfNow();
Debug.Log("当前秒级时间戳 : "+ dTime);
Debug.Log("时间戳转回时间 : " + TimeHelper.GetTimeWithTimeSpan(dTime));
}

网友评论