前阵子写了段处理带时间戳数据的脚本,本以为稳稳的,结果某天一核对,好些记录的时间比实际整整早了8小时。对着日志发了半天呆,还以为数据源出了鬼。
后来才搞明白,存库时我随手用了机器本地时间,那台服务器时区压根不是北京时间。显示和存储对不上,数据就"穿越"了。费了老大劲把历史记录一条条掰回来。
现在学乖了,时间一律先转UTC存,要显示再转本地时区。别担心,这坑踩过一次就长记性,大家写带时间的逻辑时多留个心眼就好,加油呀。
前阵子写了段处理带时间戳数据的脚本,本以为稳稳的,结果某天一核对,好些记录的时间比实际整整早了8小时。对着日志发了半天呆,还以为数据源出了鬼。
后来才搞明白,存库时我随手用了机器本地时间,那台服务器时区压根不是北京时间。显示和存储对不上,数据就"穿越"了。费了老大劲把历史记录一条条掰回来。
现在学乖了,时间一律先转UTC存,要显示再转本地时区。别担心,这坑踩过一次就长记性,大家写带时间的逻辑时多留个心眼就好,加油呀。
这8小时也太巧了,正好卡在咱这边的时差上。我平时跟国外客户约时间也常被时区绕晕,后来所有安排都先记UTC再标本地时区,跟你这思路一模一样,省心不少。
八小时这坑我太熟了 之前在国外待着跟家里视频永远错峰 时差靠脑子算迟早翻车 还是UTC锁死省心哈哈~
等等,这个我得插一嘴。你那台服务器时区不是北京时间,它之前是归谁管的呀?我怎么听着像背后还有别的事——是不是这台机器本来是别人先占着干别的活儿,时区就按人家那边的习惯留着了?前阵子版里不也聊过共用机器出幺蛾子的事儿嘛。
还有"一条条掰回来"这句,我头皮都麻了!诶到底多少条记录啊?我猜你后面肯定还是写了脚本批量回正的,不至于真手工一条条敲吧?要真是纯手工,那我可得给你竖个大拇指。
怎么说话说你们组里别人有没有也栽在这坑里,还是就你一个人闷头扛了?我咋听到的版本不太一样呢。
好家伙 整整8小时 这坑也太经典了 我每次碰时间戳都得先愣一下怕重蹈覆辙 楼主翻历史记录那股劲头我是真服的
这8小时我熟啊 之前帮我叔弄个小工具也是 他那台电脑时区不知道被谁手贱改成了夏威夷时间 跑出来的报表整整齐齐慢了半天 我对着屏幕发了十分钟呆 还以为网线被猫啃了
现在我也学乖了 时间能转UTC就先转了存 不想再跟时区较劲 跟楼主一样踩过一次就老实了 摸鱼去了
你这"时间穿越"四个字,倒让我想起前几年困在异国那半年——手机里还是北京时间,窗外的天色却另算一本账,两个钟点都是真的,又都像隔着一层雾。机器和人一样,一旦踩进了别人的时区,连记忆都会悄悄偏了航。
那台服务器时区不是北京时间,这坑藏得可真够深的。我都能想象你对着日志较劲半天、越想越迷糊的样子,这种"代码明明没动、时间却自己跑了八小时"的错乱感,光是想想就让人头大。
你现在改成先UTC存、显示再转本地,这个路子就特别踏实了。其实这类跟时间打交道的东西最怕想当然,谁能想到机器自己的时区会偷偷使绊子呢。最难得的是你还耐着性子把历史记录一条条掰回来,这份认真劲儿挺让人安心的。
下次再碰到什么莫名其妙的bug,记得来这儿念叨念叨,大家一起帮你盯着 (^_^)
对着日志发了半天呆那会儿,肯定整个人都懵了。这种"数据凭空穿越"的错乱感,光是想想都觉得头大。你后来那个处理思路挺稳的,统一先转UTC再存、显示时再转本地,这样能少踩很多坑。历史记录一条条掰回来最是磨人,辛苦啦。我以后要是碰上带时间的东西,也得先确认时区,跟你取取经~
等等,你这帖子里有个点我越想越不对——你说那台服务器时区压根不是北京时间,这机器到底哪儿来的?正常自己搭的谁会放着东八区不用。离谱
我怀疑要么是图便宜租的海外VPS,时区还停在机房当地;要么就是别人淘汰的二手货,原主配置没清干净。我听说深圳不少小团队为了省钱直接上海外云,等发现数据对不上早就攒了一堆脏数据,回头一条条掰比你还惨。有个事不知道该不该说,我一朋友更离谱,库里三种时区混着,最后写了脚本按字段猜时间,猜错就当认栽了。唔
不过你转UTC这思路我赞成,但我怎么听说的版本不一样——有人跟我讲他们全站直接锁死服务器设东八区,省得来回转。两种路子都行,但那台机器之前到底谁在使,这个才真值得琢磨。
嗯,对着日志发呆那段太真实了,谁还没被时区坑过。一条条掰回历史记录最磨人,好在现在 UTC 存储稳了,辛苦啦
我在悉尼,时差这事儿太有发言权了。UTC统一存、本地再转,标准操作,照这个干就完了!
好家伙数据自己早了8小时 我之前调监控回放也碰过时区坑,对不上号急得团团转