/// <summary>
/// 假定服务器机器时区为东八,配置timeString也为东八(通常服务器和配置的时区也必须一致)。利用utc相对时间差,计算出对应时间戳
/// 此方法无需考虑客户端本地时区
/// </summary>
/// <param name="timeString">东八时区的时间字符串,格式为"HH:mm:ss"</param>
private long GetTimestampByTimeStringWithZone(string timeString)
{
// 初始化1970年1月1日0点的UTC时间,作为时间戳计算的起点
DateTime startTime = new DateTime(1970, 1, 1, 8, 0, 0, DateTimeKind.Utc);
// 获取服务器时间(虽然DateTimeKind.Utc,但是DateTime实际是一个东八的时间)
var serverDateTime = startTime.AddMilliseconds(TimeUtils.GetServerTimestamp());
// 获取服务器时间对应的星期几的数字表示(1-7),星期日为0
var dayOfWeek = (int)serverDateTime.DayOfWeek;
// 将服务器时间转换为指定格式的字符串,获取日期字符串
string dateString = serverDateTime.ToString("yyyy-MM-dd");
// 将时间字符串转换为DateTime对象
DateTime dateTime = DateTime.ParseExact($"{dateString} {timeString}", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture,DateTimeStyles.AdjustToUniversal);
// 计算当前时间与起始时间的差值,并转换为秒,然后转换为长整型作为时间戳
var timestamp = (long)((dateTime - startTime).TotalSeconds);
return timestamp;
}