时间戳
时间Unix 时间戳(秒/毫秒)与日期互转
Unix 时间戳是自 1970-01-01 00:00:00 UTC(Unix 纪元)起的秒计数,用整数记录绝对时刻,无时区歧义,是接口与数据库里交换时间的主流方式;常需要与日期做“秒/毫秒”互转。
什么是 Unix 时间戳
Unix 时间戳用一个整数记录自 1970-01-01 00:00 UTC 至今经过的秒数。它不含时区信息,因为它是绝对瞬间的计数——任意时刻全球任何地方读到的值都相同,天然规避了本地文字表示的时区与夏令时混乱,因此接口、数据库普遍用它存时间。
秒与毫秒
常见两种单位:很多后端与数据库按秒存(10 位数字),JavaScript 的 Date.now() 则按毫秒存(13 位)。互转不过是乘除 1000。判断手头时间是秒还是毫秒的实用办法:把它转回日期看落在哪年——一位差出来的数量级会得到 1970/2001/2033 这类明显不合理的年份。
2038 年问题
以 32 位有符号整数存秒的系统最大可到 2038-01-19 03:14:07 UTC 后便会溢出回绕。解决方法是用 64 位整数,现代系统基本已是 64 位,但部分旧嵌入式与 C 代码仍需留意,涉及长尾归档或跨系统校验时值得知道这一边界。
常见误区
不要把时间戳当成“某时区的字符串”去理解,它无时区,只在显示成日期那一刻才需要选定区。也别混用秒与毫秒。做跨端时刻判断优先统一 UTC 或带偏移的 ISO 8601(YYYY-MM-DDTHH:mm:ssZ);只在纯本地的如缓存场景,才可用相对计数。