[个人框架 C_Framework](EasyTool) C# 时间戳 与 DateTime互转

开发过程中经常会遇到获取时间戳的需求,

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;
        }
    }

    ///   
    /// 获取时间戳Timestamp
    ///   
    ///   
    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#格式时间  
    ///   
    ///   
    ///   
    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;
    }

    /// 
    /// 获取当前时间戳精确到毫秒
    /// 
    /// 
    public static double GetTimestampOfNowWithMillisecond()
    {
        return (DateTime.Now - startTime).TotalMilliseconds;
    }

    /// 
    /// 获取当前时间戳精确到秒
    /// 
    /// 
    public static double GetTimestampOfNowWithSecond()
    {
        return (DateTime.Now - startTime).TotalSeconds;
    }

    /// 
    /// 获取当前时间戳精确到分钟
    /// 
    /// 
    public static double GetTimestampOfNowWithMinute()
    {
        return (DateTime.Now - startTime).TotalMinutes;
    }

    /// 
    /// 获取当前时间戳精确到小时
    /// 
    /// 
    public static double GetTimestampOfNowWithHour()
    {
        return (DateTime.Now - startTime).TotalHours;
    }

    /// 
    /// 获取当前时间戳精确到天
    /// 
    /// 
    public static double GetTimestampOfNowWithDay()
    {
        return (DateTime.Now - startTime).TotalDays;
    }
}

演示:

    void Start()
    {
        double dTime = TimeHelper.GetTimestampOfNow();

        Debug.Log("当前秒级时间戳 : "+ dTime);

        Debug.Log("时间戳转回时间 : " + TimeHelper.GetTimeWithTimeSpan(dTime));
    }
[个人框架 C_Framework](EasyTool) C# 时间戳 与 DateTime互转_第1张图片
时间戳

你可能感兴趣的:([个人框架 C_Framework](EasyTool) C# 时间戳 与 DateTime互转)