【功能】根据时区获取开服天数
海外版本中根据不同时区,获取开服天数
local LuaTimeMgr = class("LuaTimeMgr")local curServerTimeSecond --通过心跳包获取的时间,单位是秒
local getOpenDayCD = 600 --获取服务器开放天数的CD,单位是秒--发送登录请求时,初始化
GLastGetOpenDayTime = 0function LuaTimeMgr:ctor()self.openDay = 0
end--上线后同步时间
function LuaTimeMgr:SyncServerTime(serverTime)curServerTimeSecond = serverTime / 1000 --单位是秒
end--本地Update更新函数
function LuaTimeMgr:Update()if curServerTimeSecond ~= nil thencurServerTimeSecond = curServerTimeSecond + Time.unscaledDeltaTimeend
end--[[格式化时间为 年-月-日 时:分:秒
@param serverTime 服务器时间,单位是秒
]]
function LuaTimeMgr:FormatToDateTime(serverTime)if serverTime == nil thenlocal clientZone = self:GetLocalTimeZone()local serverZone = self:GetServerTimeZone()local serverTimeSecond = self:GetTimeSecond()serverTime = serverTimeSecond + (clientZone - serverZone) * 3600endreturn os.date("%Y-%m-%d %H:%M:%S", serverTime) --根据本地时区转换
end--获取本地时区
function LuaTimeMgr:GetLocalTimeZone()local now = os.time()-- local localTime = os.date("*t", now)local utcTime = os.date("!*t", now)return os.difftime(now, os.time(utcTime)) / 3600
end--获取服务器时区
function LuaTimeMgr:GetServerTimeZone()return 8
end--获取服务器开服时间
function LuaTimeMgr:GetServerStartTime()return 0
end--获取服务器开服天数
function LuaTimeMgr:GetOpenServerDay()if GLastGetOpenDayTime ~= 0 and UnityEngine.Time.realtimeSinceStartup - GLastGetOpenDayTime < getOpenDayCD thenreturn self.openDayendGLastGetOpenDayTime = UnityEngine.Time.realtimeSinceStartuplocal serverStartTime = self:GetServerStartTime()local startTime = self:GetTimeStamp(serverStartTime / 1000, self:GetServerTimeZone())local endTime = self:GetTimeStamp(self:GetTimeSecond(), self:GetServerTimeZone())local day = math.floor(endTime - startTime) / 86400self.openDay = day + 1return self.openDay
endfunction LuaTimeMgr:GetTimeStamp(timeStamp, serverZone)local tempStamp = tonumber(tostring(timeStamp)) + serverZone * 3600local utcTime = os.date("!*t", tempStamp)local tempTime = os.time({ year = utcTime.year, month = utcTime.month, day = utcTime.day, hour = utcTime.hour, min = utcTime.min, sec = utcTime.sec })local baseTime = os.time({ year = utcTime.year, month = utcTime.month, day = utcTime.day, hour = 0, min = 0, sec = 0 })if tempTime >= baseTime thenreturn tempTimeelsereturn tempTime - 86400end
endfunction LuaTimeMgr:GetTimeSecond()return math.floor(curServerTimeSecond or 0)
endreturn LuaTimeMgr
UTC时间戳问题,可通用于跨时区计算开服天数