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 自动作曲、编曲、混音于一体
相关推荐
青 春 记 忆12 小时前
LeetCode 21. 合并两个有序链表|Python 解法详解c2385614 小时前
MySQL 基础用法(上):库表管理与数据增删改大数据魔法师14 小时前
DuckDB高阶实战指南!多文件处理、窗口函数、性能调优、工程化落地Patrick在香港15 小时前
Python Docker镜像从1.2GB到89MB:多阶段构建的完整优化实录上海安当技术15 小时前
敏感数据怎么防拖库?信封加密(DEK+KEK 二层密钥)架构设计与 Java 实战jnrjian15 小时前
postgres database 更换用户無a伟16 小时前
redis缓存完整详解QAQo7T16 小时前
Python组蓝桥杯备赛超详细知识点总结笔记_排序算法篇醉颜凉16 小时前
蓝桥杯2025年第十六届省赛真题-最大数字 Python题解卷无止境17 小时前
当独立开发者也能造出3A画质的游戏:Godot引擎深度解析