记一次北美游戏服务器冬令时夏令时切换引发的时间问题

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
函数计算FC,每月15万CU 3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 记一次北美游戏服务器冬令时夏令时切换引发的时间问题

由于在运行的某SLG游戏在国内苹果商店多次拿到推荐,我们打算把它做到海外,部署按照全球唯一服的架构来部署,运维同事将集群中的各个模块选择部署在美国芝加哥的机房。上线一段时间后客服反馈平时凌晨3点重置玩家每日数据的时间变成了4点,往后推迟了1小时,当时怀疑是不是出BUG了,查了代码发现这里有猫腻:

public static final long GMT_8 = TimeZone.getDefault().getRawOffset();

image.gif

并且查了这里的时区是America/Los_Angeles,按照经验,这里走的是夏令时,夏令时时区会比平常的时间走的快,所以虽然是3点,实际上对应的夏令时时间是4点,这下找到问题的关键就有办法来解决。

什么是夏令时,冬令时:

很简单,我们平常用的格林威治标准时间(又译:格林尼治标准时间,Greenwich Mean Time),到了三月,就在格林威治标准时的基础上拨快一个小时,新的时间就是夏令时。到了十月,又在夏令时的基础上拨慢一个小时,就形成冬令时了,说的再简单点,冬令时就是格林威治标准时。

  美国时间一般被认为是美国本土的时间。美国本土横跨西五区至西十区,共六个时区,每个时区对应一个标准时间。从东向西分别为东部时间(EST)(西五区时间)、中部时间(CST)(西六区时间)、山地时间(MST)(西七区时间)、太平洋时间(西部时间)(PST)(西八区时间)、阿拉斯加时间(AKST)(西九区时间)和夏威夷时间(HST)(西十区时间),按照“东早西晚”的规律,各递减一小时。美国从每年3月的第二个星期日至11月的第一个星期日采用夏令时,夏令时比正常时间早一小时。

image.gif编辑

夏令时(3月11日至11月7日)

东部时间12小时(黄色),中部时间13小时(绿色),山地时间14小时(蓝色),太平洋时间15小时(红色)

冬令时(11月8日至次年3月11日)

东部时间13小时(黄色),中部时间14小时(绿色),山地时间15小时(蓝色),太平洋时间16小时(红色);

如何规避:

1.根据代码来判断当前是冬令时夏令时来做逻辑区分(因为服务器的代码是java,这里我就只提供java方法):

public static boolean isDaylightTime(LocalDateTime a) {
        LocalDateTime startDate = a.withMonth(3).toLocalDate().atTime(2, 0);
        LocalDateTime startlightDay = startDate.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.SUNDAY));
        //更新为11月
        LocalDateTime endDate = a.withMonth(11).toLocalDate().atTime(1, 59,59);
        LocalDateTime endlightDay = endDate.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.SUNDAY));
        if (a.isBefore(startlightDay) || a.isAfter(endlightDay)) {
            return false;
        }
        return true;
    }

image.gif

2.调整时区:

怎么避免,我这里做如下调整:

image.gif编辑

修改为America/Phoenix地区时间(不走夏令时):

timedatectl set-timezone America/Phoenix

image.gif

然后调整数据库的相关时区

<sqlAddr>jdbc:mysql://127.0.0.1:3306/databasename?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=America/Phoenix&amp;allowPublicKeyRetrieval=true</sqlAddr>

mysql默认时区:

mysql> show variables like '%time_zone%';+------------------+--------+| Variable_name    | Value  |+------------------+--------+| system_time_zone | CST    || time_zone        | SYSTEM |+------------------+--------+my.cnf配制文件修改


可以通过修改my.cnf


在 [mysqld] 之下加default-time-zone=timezone来修改时区。

如:default-time-zone = '+8:00'

通过命令:

set time_zone = timezone


比如北京时间(GMT+0800)set time_zone = '+8:00';

美国pst时间(GMT-08:00)set time_zone = '-8:00';

mysql> set time_zone = '+8:00';   Query OK, 0 rows affected (0.17 sec)
mysql> select now(); +---------------------+| now()               |+---------------------+| 2016-06-23 16:32:53 |+---------------------+1 row in set (0.00 sec)
mysql> set time_zone = '-8:00';   Query OK, 0 rows affected (0.00 sec)
mysql> select now();   +---------------------+| now()               |+---------------------+| 2016-06-23 00:33:21 |+---------------------+1 row in set (0.00 sec)

mysql 数据库中的时区信息默认为空:


mysql> show tables like "%time%";+---------------------------+| Tables_in_mysql (%time%) |+---------------------------+| time_zone || time_zone_leap_second || time_zone_name || time_zone_transition || time_zone_transition_type |+---------------------------+5 rows in set (0.00 sec)

实际上我更倾向于调整时区,这个省事,而且避免游戏逻辑里的一些处理,最近游戏客服小姐姐气色也好多了,毕竟这个BUG解决了后她就不用被玩家因此diss了。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java 云计算
阿里云国际站代理商:Java计算当前时间处于某段时间内的第几周、第几个月
@luotuoemo飞机@TG阿里云国际站代理商:Java计算当前时间处于某段时间内的第几周、第几个月,以上就是使用Java代码计算当前时间处于某段时间内的第几周和第几个月的全部内容。通过该篇文章,我们可以了解到如何使用Java的Calendar类以及日期函数来计算时间段内的周数和月数,掌握相应的计算方法和实践技巧。在开发过程中,合理运用这些方法,可以方便地获取时间相关的信息,满足业务需求,提高开发效率。希望本文能对读者在使用阿里云国际站代理商开发Java应用时计算时间段的周数和月数提供一些帮助与启示。
|
7天前
|
人工智能 云计算 数据中心
加码香港!连续市场第一,启动新计划
加码香港!连续市场第一,启动新计划
35 4
|
7月前
|
自然语言处理 搜索推荐 SEO
蓝易云 - 三分钟带你了解香港多ip站群服务器
注意事项:尽管多IP站群服务器有许多优点,但也需要注意遵守搜索引擎的规则,避免被认为是恶意SEO。
75 4
|
8月前
|
Linux BI
设置Linux服务器时间为北京时间
设置Linux服务器时间为北京时间
354 1
|
关系型数据库 MySQL Java
还在为时区问题发愁?获取的时间与中国时间差八小时怎么办?史上最全的解决方案总结
还在为时区问题发愁?获取的时间与中国时间差八小时怎么办?史上最全的解决方案总结
|
网络安全
从周五开始香港主机特别慢,香港主机用户有同感吗?
从周五开始香港主机特别慢,香港主机用户有同感吗? 随着香港主机市场普及率增高,香港主机使用过程中出现的问题也让更多企业和朋友感到烦恼,某些用户在使用香港主机时可能感觉网络速度变慢,变卡等状况。那么哪些因素会导致香港主机速度慢呢?阿里云在此为您作简单介绍。
2140 0
|
网络安全
从周五开始美国服务器特别慢,美国服务器用户有同感吗?
从周五开始美国服务器特别慢,美国服务器用户有同感吗? 随着美国服务器市场普及率增高,美国服务器使用过程中出现的问题也让更多企业和朋友感到烦恼,某些用户在使用美国服务器时可能感觉网络速度变慢,变卡等状况。
2028 0
|
API 弹性计算
要选海外服务器?如果是海外服务器国内访问是不是有延迟?
要选海外服务器?如果是海外服务器国内访问是不是有延迟? 我想做一个在国内访问的网站,想部署在阿里云上,但是想在阿里云中调用谷歌提供的一些API,不知道阿里云的网络通不通?要选海外服务器?如果是海外服务器国内访问是不是有延迟? 国内不能访问的API 国内地域的ECS,和我们家用的网络结果差不多,即家里不能访问到的国外资源,一般在阿里云的境内地域上的ECS也访问不了的喔。
3159 0