起因
很多时候我们会碰到这样的需求,每天某个时候需要定时执行某个任务,比如定时发邮件、定时发推送消息等,而这个定时是针对当地时间的,比如每天中午12点发推送消息给玩家提醒可以上线领金币啦。
然而,中国的12点和越南的12点就不是同一个12点,所以需要通过时区计算是否到了该执行任务的时候。
思路
先来看一下如何根据时区计算约定的时间。假设现在需要晚上20点,执行任务,时区为西3时区。首先生成一个格林威治时间的20点
utcTime := time.Now().UTC()
targetTime :=time.Date(utcTime.Year(),utcTime.Month(),utcTime.Day(),
20, 0, 0, 0, utcTime.Location())
由于西3时区比格林威治时间慢3个小时,等西3时区20点的时候,格林威治时间就是20点再过3小时,对应的格林威治时间就是
targetTime.Unix() + 3 * 3600
而如果是东8时区到20点的时候,格林威治时间