按照指定时区显示和选择时间
--[[
    --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

首页 我的博客
粤ICP备17103704号