Ruby on Rails时区异常:API返回时间多出2小时
Rails UTC时区API返回时间偏移问题排查与解决
问题现象
- 已确认PostgreSQL数据库、服务器、Rails框架均配置为UTC时区
- 移动端传入UTC+0时间
"sinced_at": "2015-04-23 09:12:23"存入数据库后,API返回的"synced_at"变为"2015-04-23 11:12:23",偏移了2小时 - 移除序列化器中的
in_time_zone方法后,返回时间恢复正常
核心原因
序列化器中调用的in_time_zone方法会对UTC时间做时区转换:
- 若调用时未显式指定目标时区,方法会默认使用当前上下文的
Time.zone设置(即便全局配置为UTC,也可能存在局部上下文被覆盖的情况),导致时间被转换为UTC+2时区 - 移除该方法后,Rails直接输出数据库存储的UTC原始时间,结果符合预期
解决方案
- 直接移除
in_time_zone调用:无需额外时区转换时,让Rails默认输出UTC格式的时间字符串 - 显式指定UTC时区:若必须保留
in_time_zone方法,需明确传入UTC参数,示例代码:object.synced_at.in_time_zone('UTC')
内容的提问来源于stack exchange,提问作者Gardelin
相关产品推荐
相关产品推荐

