时间戳入门:先弄清秒、毫秒与时区这三件事
第一次看接口返回的时间,很多人都会愣一下:1700000000这样一串数字,怎么看都不是时间。可它偏偏就是时间,而且是程序世界里最常用的时间写法。今天就把时间戳这件事讲清楚,只抓三个点:秒、毫秒和时区。
一、时间戳是什么
时间戳就是从一个固定起点到某个时刻经过的秒数。这个起点是1970年1月1日0点0分0秒,程序员常叫它纪元。把时间存成一个数字,好处很实在:比较大小就是比较数字大小,算两个时刻差几天就是做减法,不用再去对年月日时分秒一个一个换算。数据库里存时间戳、接口传时间戳,都是图这个省事。
二、秒和毫秒,别差一千倍
时间戳有两种常见单位。一种是秒级,10位数字,比如1700000000;一种是毫秒级,13位数字,比如1700000000000。后者就是前者乘以1000,多了三位。初学者最常踩的坑,就是把毫秒当成秒来用,或者把秒当成毫秒来传,时间一下子就跑到几万年以后,或者缩回1970年。拿到一串时间戳,先数数它有几位:10位按秒算,13位按毫秒算,再去换算,这一步千万别省。如果是13位却按秒处理,显示的日期会错得离谱,这是接口联调时最容易互相误会的地方。
三、时区:同一个数字,不同的钟表
时间戳本身没有时区,它记录的是一个绝对时刻。把它变成人能看懂的年月日时分秒,才需要时区。同样一个时间戳,在北京显示是下午三点,在伦敦显示就是早上七点,数字没变,变的是读它的那口钟。存时间用时间戳、展示时间再换算成本地时区,是最不容易出错的做法。反过来,把带时区的本地时间直接当成时间戳去比较,跨时区的两个人就会各说各话。
四、三个最常见的错误
第一是把秒和毫秒混用,位数一错,日期全错。第二是只看本地时间不看时区,同一时刻在两地显示不同就以为是数据错了。第三是把时间戳当成字符串去比较大小,字符串比较是按字符一位一位比的,和数字大小不是一回事,排序结果常常出人意料。遇到时间对不上的问题,先核对单位,再核对时区,最后核对类型,大部分问题都在这三步里。
五、一个小练习
给自己出一道小题:找一个你熟悉的时刻,比如今天早上九点,先把它换算成秒级时间戳,再乘以1000变成毫秒级;然后分别用北京时间和零时区去读它,看看差了几个小时。能把这三件事一次讲对,时间戳就算入门了。
- 点赞
- 收藏
- 关注作者
评论(0)