记录把我坑惨的ruby时间问题

最近在做一个新项目,后端为Ruby语言,有一段代码需求是这样的:
判断今天有没有存入记录,如果没存入就存一条,存入的话就不再存。
因为代码是在实时的脚本运行,考虑到防止大规模查询记录表,就额外加了一个字段记录上次存入时间格式为(Y-M-D);
然后把上次存入的时间(a_time)跟 今天的0时0分0秒(b_time) 作对比,如果 a_time < b_time,即表明今天还未存入记录,则进行存储操作。写完之后,也进行了测试,发现并没什么不妥。直到部署到正式环境之后!!!

凌晨12点进行了部署,第二天早上发现,每个人都创建了几百条记录(幸亏做了双重限制,只是几百条),然后很多用户疯狂通过多发的记录套现(具体细节不在此处描述)。。。。。连续补救了18个小时,终于把数据补救回来,公司的亏损也挽救了。

造成此重大BUG的原因,因为少写了一个Time.parse()方法

代码例:

if last_save_time(Time) < "2020-11-11 00:00:00"(String)
	#存入操作,此时更新last_save_time为今天的凌晨0点0分0秒
)

前者last_save_time是time类型的,中国东八区,即+800;
后者字符串时间,并没有时区,两者看似一样的值,但实际是少了8小时,对比就成了:
if last_save_time(Time) < “2020-11-10 16:00:00”(Time)
#那么这个时候,无论今天再怎么保存,它都会进入这个条件内,进行再次创建记录
end

在进行代码测试的时候又不是0点-8点,就算减了8小时他还是今天,所以没有发现BUG。。。。
解决方案应该在后面的字符串时间加上Time.parse(),如Time.parse(“2020-11-11 00:00:00”),这样它就是带时区的时间了

无语…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值