关于时间戳的理解
时间戳的定义一般是指 Unix 时间戳,即自从 Unix 纪元(格林威治时间1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
因此,理论上来说时间戳是基于Unix时间的,和时区无关,同一时刻不同时区计算的时间戳应该是一样的,不存在什么本地时间戳概念,
如果要将本地时间转成时间戳,就需要先将本地时间转成utc时间,然后再减去1970年1月1日
如果将时间戳转成本地时间,可以把utc1970年1月1日转成本地时间,再加上秒数
public void Test() { DateTime dt = new DateTime(2024, 2, 28); Console.WriteLine(dt); long timestamp = ToUnixTimestampForLocalTime(dt); Console.WriteLine(timestamp); DateTime dt_result = ToLocalTimeForUnixTimestamp(timestamp); Console.WriteLine(dt_result); Console.WriteLine(dt == dt_result); } /// <summary> /// /// </summary> readonly DateTime time1970 = new DateTime(1970, 1, 1); /// <summary> /// 时间戳的起始时间点的本地时间,北京时间多8个小时 /// </summary> readonly DateTime time1970_local = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); /// <summary> /// 将本地时间转成Unix时间戳 /// </summary> public long ToUnixTimestampForLocalTime(DateTime dt) { return (long)(dt.ToUniversalTime() - time1970).TotalSeconds; } /// <summary> /// 将Unix时间戳转成本地时间 /// </summary> public DateTime ToLocalTimeForUnixTimestamp(long timestamp) { return time1970_local.AddSeconds(timestamp); }