time.Now().Unix() 返回秒级时间戳,截断纳秒部分;UnixMilli() 自Go 1.17起返回毫秒级时间戳,同样向下取整,二者均基于UTC且跨时区一致。time.Now().Unix() 返回的是秒级时间戳Go 的 time.Now() 默认返回的是纳秒精度的 time.Time,但 Unix() 方法只取到秒级整数------它丢弃了纳秒部分,直接返回自 Unix 纪元(1970-01-01 00:00:00 UTC)以来的完整秒数。常见错误是以为 Unix() 会四舍五入或保留小数,其实它就是向下取整(截断),比如 2024-05-20 10:30:45.999999999 调用后仍是 1716201045。适用于日志打点、缓存过期、简单排序等对毫秒不敏感的场景注意:跨时区调用结果一致,因为 Unix() 基于 UTC 时间计算别和 UnixMilli() 混用------后者是 Go 1.17+ 新增,返回毫秒,不是 Unix() * 1000 的手动换算time.Now().UnixMilli() 是毫秒时间戳的正确写法Go 1.17 起,time.Time 原生支持 UnixMilli(),它把纳秒转成毫秒并向下取整(不是四舍五入),结果是 int64 类型。容易踩的坑是低版本 Go(t.Unix()*1000 + t.Nanosecond()/1e6,这逻辑错在:纳秒部分除以 1e6 可能进位,导致毫秒值比 UnixMilli() 多 1。立即学习"go语言免费学习笔记(深入)";Go 1.17+ 直接用 time.Now().UnixMilli()低于 1.17,稳妥写法是 t.Unix()*1000 + int64(t.Nanosecond())/1e6(注意是整除,不是四舍五入)数据库字段类型为 BIGINT 存毫秒戳时,优先用 UnixMilli(),避免浮点或字符串中转time.Unix(sec, nsec) 反向构造时间对象要小心 nsec 范围从时间戳还原 time.Time 时,time.Unix(sec, nsec) 的第二个参数 nsec 必须在 [0, 1e9) 范围内,否则行为未定义(实际会溢出进位,可能得到错误日期)。 唱鸭 音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体
相关推荐
东莞市云毅网络有限公司6 小时前
AI 引用句逐条回指原文:让回答可回溯的校验实现李兆龙的博客8 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性数字融合8 小时前
透明化视频三维矿山井下照明重建技术yi0118 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”Marst Code9 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界倔强的石头_10 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品闲云野鹤在人间10 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解禾小西10 小时前
Redis:从两大维度和三大主线建立知识体系李日华大战鸡红10 小时前
FOC状态空间方程模型推导(学习记录)禾小西11 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?