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