时间戳的定义一般是指 ,即自从 Unix 纪元(格林威治时间1970 年 1 月 1 日 00:00:00)到当前时间的秒数。

因此,理论上来说和时区无关,同一时刻不同时区计算的时间戳应该是一样的,不存在什么本地时间戳概念,

如果要将本地时间转成时间戳,就需要先将本地时间转成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);

}

///

///

///

readonly DateTime time1970 = new DateTime(1970, 1, 1);

///

/// 时间戳的起始时间点的本地时间,北京时间多8个小时

///

readonly DateTime time1970_local = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));

///

/// 将本地时间转成Unix时间戳

///

public long ToUnixTimestampForLocalTime(DateTime dt) {

return (long)(dt.ToUniversalTime() - time1970).TotalSeconds;

}

///

/// 将Unix时间戳转成本地时间

///

public DateTime ToLocalTimeForUnixTimestamp(long timestamp) {

return time1970_local.AddSeconds(timestamp);

}