问题
在项目开发中经常需要用到timestamp来表示时间,一般当前时间都会用数据库默认的current_timestamp来自动生成,而当数据库设置了时区而没用UTC来表示时间的时候,往往会相差8小时
形成原因
查看时区命令
show VARIABLES like '%time_zone%';
GMT、UTC、DST、CST时区代表的意义
GMT:Greenwich Mean Time
格林威治标准时间 ; 英国伦敦格林威治定为0°经线开始的地方,地球每15°经度 被分为一个时区,共分为24个时区,相邻时区相差一小时;例: 中国北京位于东八区,GMT时间比北京时间慢8小时。
UTC: Coordinated Universal Time
世界协调时间;经严谨计算得到的时间,精确到秒,误差在0.9s以内, 是比GMT更为精确的世界时间
DST: Daylight Saving Time
夏季节约时间,即夏令时;是为了利用夏天充足的光照而将时间调早一个小时,北美、欧洲的许多国家实行夏令时;
CST:Central Standard Time
Tips 时间戳:表示从1970年1月1日 00:00:00到现在所经历的秒数,与时区无关
Central Standard Time (USA) UT-6:00 美国标准时间
Central Standard Time (Australia) UT+9:30 澳大利亚标准时间
China Standard Time UT+8:00 中国标准时间
Cuba Standard Time UT-4:00 古巴标准时间
一般系统的time.now() 获取的为utc时间,若数据库存的是含时区的,则会快8个小时,所以时区需要匹配对,全部用UTC或者当地时间
解决
挂载时区文件,全部用北京时间,或者数据库存放UTC时间
volumeMounts:
- name: timezone
mountPath: /etc/localtime
volumes:
- name: timezone
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai