0

0

Golang如何获取当前时间_time Now与Unix时间戳说明

P粉602998670

P粉602998670

发布时间:2026-01-23 12:45:44

|

155人浏览过

|

来源于php中文网

原创

time.Now() 返回 *time.Time 类型,含时区、纳秒精度等完整信息,默认本地时区;Unix 时间戳方法(如 Unix()、UnixMilli())与时区无关,转换需注意纳秒参数含义。

golang如何获取当前时间_time now与unix时间戳说明

Go 中 time.Now() 返回的是什么类型

time.Now() 返回的是 *time.Time 类型的值,不是字符串、不是整数,而是一个包含时区、纳秒精度、年月日时分秒等完整信息的结构体。它默认使用本地时区(由系统环境决定),不是 UTC,这点容易被忽略。

常见错误:直接用 fmt.Println(time.Now()) 看输出,误以为“看起来像 UTC”就真的是 UTC —— 实际上打印格式会自动按本地时区做偏移显示,但底层仍是带时区的完整时间对象。

  • 要确认时区,可调用 t.Location().String(),比如 LocalUTC
  • 若需 UTC 时间,应显式调用 time.Now().UTC(),而不是依赖打印结果判断
  • 跨服务或存储时间时,强烈建议统一用 UTC,避免夏令时或本地配置差异引发 bug

如何从 time.Time 获取 Unix 时间戳

Unix 时间戳指自 1970-01-01 00:00:00 UTC 起经过的秒数(int64),Go 提供两个核心方法:

  • t.Unix() → 返回秒级时间戳(int64
  • t.UnixMilli() → 返回毫秒级(Go 1.17+,推荐用于多数 Web/API 场景)
  • t.UnixMicro() → 微秒级(Go 1.17+)
  • t.UnixNano() → 纳秒级(注意:数值极大,易溢出 int64 表达范围,慎用)

注意:Unix()UnixMilli() 的结果**与时区无关**——只要 t 是同一个时刻(哪怕一个在东京、一个在纽约),它们返回的数值完全一致。这是 Unix 时间戳的本质:它描述的是绝对时间点。

立即学习go语言免费学习笔记(深入)”;

Postme
Postme

Postme是一款强大的AI写作工具,可以帮助您快速生成高质量、原创的外贸营销文案,助您征服全球市场。

下载

把 Unix 时间戳转回 time.Time 的正确方式

time.Unix(sec, nsec) 构造,但参数含义常被误解:

  • 第一个参数 sec 是秒数(如 1717023456
  • 第二个参数 nsec 是该秒内的纳秒偏移(0–999,999,999),**不是毫秒**
  • 若只有毫秒值(如 1717023456123),需拆解:sec := ms / 1000nsec := (ms % 1000) * 1e6
ms := int64(1717023456123)
t := time.Unix(ms/1000, (ms%1000)*1e6)

错误写法:time.Unix(ms, 0) —— 这会把毫秒值当秒传,导致时间错乱成公元 56390 年。

性能与序列化注意事项

在高并发 API 或日志打点中频繁调用 time.Now() 是安全的,Go 运行时做了优化,开销极低。但要注意:

  • JSON 序列化 time.Time 默认用 RFC3339 格式(含时区),不是时间戳;如需输出为数字戳,得自定义 MarshalJSON 方法或提前转成 int64
  • 数据库驱动(如 database/sql)通常能自动处理 time.Time,但某些旧版 SQLite 驱动可能只认 Unix 秒数,需手动转换
  • time.Now().Unix()time.Now().UnixMilli() 略快(少一次乘法),但差距在纳秒级,优先选语义清晰的 API

真正容易出问题的地方是:混用本地时间和 UTC 时间做计算,比如用 time.Now() 记录开始,再用 time.Now().UTC() 记录结束,两者相减会因时区偏移引入误差。统一时区才是关键。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

393

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

197

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

191

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

273

2025.06.17

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.5万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号