德黑兰夏令时从4:30调整为3:30后应用时间未同步问题
解决德黑兰夏令时调整后应用时间未更新的问题
排查方向1:验证系统时区数据是否更新到位
- 在服务器终端执行
timedatectl(Linux)或tzutil /l(Windows),确认系统的Asia/Tehran时区数据已包含最新夏令时规则。 - 手动测试时区转换:运行
TZ=Asia/Tehran date,查看输出时间是否符合调整后的3:30偏移。若此处结果异常,说明系统时区数据包未更新,需执行对应系统的更新命令:- Ubuntu/Debian:
sudo apt install --only-upgrade tzdata - CentOS/RHEL:
sudo yum update tzdata
- Ubuntu/Debian:
排查方向2:检查日期库的时区依赖
- 若应用使用
moment、dayjs等第三方日期库,它们可能自带独立时区数据,不会自动同步系统tzdata:- dayjs:更新
dayjs-plugin-timezone至最新版本,确保包含德黑兰新规则 - moment:执行
npm update moment-timezone更新时区数据包
- dayjs:更新
- 排查代码中是否硬编码了时区偏移(如直接写
+04:30),这类硬编码会忽略系统时区配置,需改为动态读取时区规则
排查方向3:确认环境变量是否生效
- 在应用代码中添加打印语句:
console.log(process.env.TZ),启动后查看输出是否为Asia/Tehran。若为空,说明启动命令的环境变量传递有问题:- Linux/macOS的npm脚本:确保
package.json中命令为"start": "TZ=Asia/Tehran nest start" - Windows的npm脚本:改为
"start": "set TZ=Asia/Tehran && nest start" - 若使用PM2等进程管理器,需在配置文件中单独设置环境变量(如ecosystem.config.js中添加
env: { TZ: 'Asia/Tehran' })
- Linux/macOS的npm脚本:确保
排查方向4:清除缓存与重启进程
- 完全重启NestJS进程,避免旧时区配置被缓存
- 清除Node.js模块缓存:执行
npm start -- --no-cache,或删除node_modules/.cache目录(若存在)
内容的提问来源于stack exchange,提问作者Farhang Foghani
相关产品推荐
相关产品推荐

