--[[ --CurTime为当前时区转换的时间戳 CurTime - SetTimezone = SetTime - CurTimezone CurTime - SetTime = SetTimezone - CurTimezone SetTime = CurTime - (SetTimezone - CurTimezone) --总结:使用当前时区变成的时间戳需要-offset转换成设置时区对应点数的时间戳 例如东八区的0点,转换为东7区的0点,需要-(7*3600 - 8*3600) --NormalTime为服务器传过来的标准时间戳 NormalTime - CurTimezone = SetTime - SetTimezone SetTimezone - CurTimezone = SetTime - NormalTime SetTime = NormalTime + (SetTimezone - CurTimezone) --总结:标准时间戳需要+offset来得到设置时区对应点数 例如同一时间戳东八区转为8点,东七区为7点,但是按东八区来转,所以+(7*3600 - 8*3600) 注意一些获取当天0点的那些方法,有可能设置时区的当前0点并不是同一天 例如东八区的28号1点,但东七区是27号23点,所以需要加上偏移区获取0点,但获取到的0点也是当前时区的0点的时间戳,只是有可能日不一样 ]] function M:GetTimezoneOffsetSec() if not self.timezoneOffsetSec then local curTimeZoneSec = os.difftime(os.time(), os.time(os.date("!*t", os.time()))) local hour,min = math.modf( 7 ) --东7区 local min = min * 100 local setTimeZoneSec = hour * 3600 + min * 60 self.timezoneOffsetSec = setTimeZoneSec - curTimeZoneSec end return self.timezoneOffsetSec end