timestamp可用于应对统一时间需求

假设这样的场景。

欧洲的玩家与中国的玩家匹配上了一场对局,而负责提供对战支持的服务器在美国

问题来了,这场对局的发生时间以哪个为准?

能不能满足一种需求,中国玩家查看对局信息时,对局开始时间是按北京时间日期算;而欧洲玩家查看对局信息时,又是按他当地的时间日期算。


其实很简单,数据库里使用timestamp类型的字段,比如addtime来记录对局开始时间。

写入的时候不复杂,使用mysql 自带的now() 函数  或者 CURRENT_TIMESTAMP ,把美国的服务器时间写进表。

这时表里面实际储存的是一串数字,即时间戳,例如1515049982


读取 的时候,可以用unix_timestamp(addtime)来把这个数字拿出来,然后再使用各个语言自带的时间函数,把它转为当地时间显示即可。



验证过程:

找了国内和国外两个服务器,确认了当地服务器时间不同后,建同样的表。这个表addtime默认值是CURRENT_TIMESTAMP


CREATE TABLE `timetest` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `addtime` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  PRIMARY KEY (`id`)
) AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

同时往表里插入一条数据,

INSERT into timetest (id) values (3);

然后select 出来

select addtime,
unix_timestamp(addtime) 
from timetest;

就会发现,时间戳数字只相差1(手速原因),但是显示的date和time是不一样的。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值