lua 时区

时区

全球划分为24个时区(东、西各12个时区)。规定英国为中时区(零时区)、东1-12区,西1-12区,东正西负。东、西第12区各跨经度7.5度,以东、西经180度为界。计算方法:时刻东进(+)西退(-),日期东退(-)西进(+)。也就是说,时刻向东每过一个时区要加上一个小时,向西每过一个时区减去一个小时。(相邻两个时区的时间相差1小时)
在这里插入图片描述

全球时区划分

 
我国东8区的时间总比泰国东7区的时间早1小时,而比日本东9区的时间迟1小时。
 
 
时间差 = 时区差
  时区计算举例:
   例1:已知东京(东九区)时间为5月1日12:00,求北京(东八区)的区时。
        (+9)(东九区) – (+8)( 东八区) = 12:00 – x
        X = 12:00 – 1 = 11:00
   例2:已知北京时间为5月1日12:00,求纽约(西五区)的区时
        (+8)(东八区) – (-5)( 西五区) = 12:00 – y
        Y = 12:00 – 13 = 23:00 (4月30日)

 

lua 中时区计算

	local os_time = os.time() -- 返回时间戳,不受时区影响,单位秒
	local os_date = os.date("*t", os_time) -- 把时间戳转换为日期,受到时区的影响,
											--就是说会自动转换为当前时区的时间
	local os_date2 = os.date("*t", os_time) -- 把时间戳转换为日期,不受时区的影响,
											--因为它返回的是格林尼治(时区是0)的时间
	local timezone = os.difftime(os_time, os.time(os.date("!*t", os_time))) / 3600 -- 当前时区



	案例1:假设某个活动(暂称情缘活动)在某天开放,在那天11:00过后可以购买道具,怎么判断是否到了11:00?
			(活动的开启控制假设在其他地方,在这里假设活动已经开启了,不再处理活动开启相关。)
	解析:注意11:00是服务器上的11:00,如果我们在其他时区,那么当服务器上是11:00时我们的时间并不是
			11:00,不能通过os_date的hour来和11:00比较。我们的目标是把时间转换为服务器所在时区的时间。
			假设服务器在东8区,我们在东2区,我们的时间会比服务器晚6个小时。
			local currentTimeZone = 2
			local serverTimeZone = 8
			local os_time = os.time() -- 获取时间戳
			-- 如果直接把这个时间戳转换为我们时区的时间,结果会比服务器小6个小时,所以即使服务器上已经
			-- 是11:00,我们转换到本地后我们的时间是5:00,所以我们要补偿上6个小时
			local time_stamp_server = os_time + (serverTimeZone - currentTimeZone) * 60 * 60 -- 补偿
			local time_server = os.date("*t", time_stamp_server) -- 得到服务器上的时间
			if time_server.hour >= 11 then
				-- do something
			else
				-- do something
			end
	封装:
	function GetTimeZone()
		local os_time = os.time()
		return os.difftime(os_time, os.time(os.date("!*t", os_time))) / 3600
	end
	function GetServerTimeHour(serverTimeZone, timeStamp)
		local time_stamp_server = timeStamp + (serverTimeZone - GetTimeZone()) * 60 * 60
		-- 如果需要考虑夏令时的影响
		-- local isDst = os.date("*t").isdst
		-- time_stamp_server = time_stamp_server - (isDst and 1 or 0) * 60 * 60
		local time_server = os.date("*t", time_stamp_server)
		return time_server.hour
	end
	

 
时区介绍及计算:https://www.zhuankeshuo.com/articles/4944287.html
时间计算:https://blog.csdn.net/qq_33337811/article/details/69295317
os.date():https://www.cnblogs.com/gangtie/p/14837213.html
夏令时:https://blog.csdn.net/yiluxiangbei000/article/details/126640670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值