技术科普
时区与云服务器:为什么默认总是UTC
新买的云服务器登录后执行 date,多半显示UTC时间。这不是厂商偷懒,而是刻意选择:服务器面向全球用户,UTC没有夏令时,也不会因地区规则变化而跳变。
Linux的时间配置
- 硬件时钟通常以UTC保存,系统启动时换算为本地时间
- timedatectl 可查看和设置时区,例如 Asia/Shanghai
- 修改时区只影响显示与本地时间解析,不改变绝对时刻
应用层的影响
日志若按本地时间写入,跨时区排查时需要额外换算;数据库若混存本地时间与UTC,排序会出现错乱。常见规范是:存储统一UTC,展示按用户时区转换,日志带明确的时区标识。
容器的时区传递
容器默认继承宿主机的时区文件,但很多精简镜像不含完整的时区数据库。可以通过挂载 /etc/localtime、设置 TZ 环境变量,或在镜像中安装 tzdata 解决。生产环境更推荐保持UTC,仅在展示层转换。
定时任务的坑
cron 按系统时区解释时间表达式。若服务器在UTC、业务在北京时间,原本想每天9点执行的任务会在北京时间17点触发。可以在任务中显式切换时区,或把调度交给支持时区参数的平台。
小结
云上时间的最佳实践是“底层UTC、边界转换”:服务器、数据库、消息队列都用UTC,只在面向用户的接口和报表处转换为本地时间。