前阵子写了个每天跑的定时任务,逻辑很简单,本地测了没问题就直接上去了。结果有天半夜被报警叫醒,说同一份任务跑了两遍。
查了半天才反应过来,我一直在把服务器时间当"本地时间"用。服务器是UTC,我在东八区,定时写在"凌晨三点"——这个三点到底是哪里的三点?赶上夏令时,时差还飘。代码里的时间是naive的,不带任何时区标记,全靠一种"大家都懂的默契"。默契个鬼。
呵呵说真的,时间这种东西,不显式带时区就是给自己埋雷。现在我一律存UTC,显示再转本地,多打几个字母比半夜爬起来香多了。离谱的是这坑我居然踩了两次,대박。你们有没有被 timezone 整过的?