C# DateTime 时间转换与时间戳

Unix时间戳,从1970-1-1 0:0:0 UTC到现在的累计时间:秒数,毫秒数

public static DateTime UnixTimeStampStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

DateTime的Ticks: 单位是 100 毫微秒,表示自 0001 年 1 月 1 日午夜 12:00:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。

可以通过转换DateTime到Ticks或秒,毫秒或自定义格式来生成时间戳。

 

转换DateTime为Ticks:

    public static long DateTimeToTicks(DateTime time)
        {
            long value = time.ToUniversalTime().Ticks;
            return value;
        }

转换Ticks为DateTime:

        public static DateTime TicksToDateTime(long value)
        {
            DateTime time =
                TimeZoneInfo.ConvertTimeFromUtc(new DateTime(value),
                TimeZoneInfo.Local);
            return time;
        }

注意:转换Ticks获得的DateTime时区为UTC,需要转换为当地时区。

 

DateTime转换为秒:

        public static long DateTimeToTimeStamp(DateTime dateTime)
        {
            return (long)(dateTime.ToUniversalTime() - UnixTimeStampStart).TotalSeconds;
        }

使用传入的时间-之前定义的Unix时间戳开始时间,再获取时间差的累计秒。

 

秒转换为DateTime:

        public static DateTime TimeStampToDateTime(long sec)
        {
            return UnixTimeStampStart.AddSeconds(sec).ToLocalTime();
        }

 

也可使用同样方法转换为毫秒,由毫秒转换回DateTime。

 

自定义时间戳:

我自定义了一种时间戳,使用字符串格式化表示来定义时间戳。

比如对于:年-月-日_时-分-秒 的格式化转换定义:

        public static string DTToMyTS(DateTime dt)
        {
            string ts = dt.ToString("yyyy-MM-dd_hh-mm-ss");
            return ts;
        }

 

posted @ 2021-01-15 17:46  windin  阅读(7885)  评论(0编辑  收藏  举报