如何使用Go语言time包的Layout函数精确转换时间戳为日期格式?

2026-05-07 01:520阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计932个文字,预计阅读时间需要4分钟。

如何使用Go语言time包的Layout函数精确转换时间戳为日期格式?

`Go` 的 `time.Unix()` 函数接受两个参数,第一个是自 Unix 纪元(1970年1月1日00:00:00 UTC)以来的秒数,第二个是纳秒数。很多人误将毫秒数当作秒数传递,导致结果为1970年的日期。例如,`time.Unix(1717027200000, 0)` 实际上是1717年,因为Go将其视为秒数。

  • 毫秒时间戳要先除以 1000 得秒数,余数转纳秒:time.Unix(ms/1000, (ms%1000)*1e6)
  • time.UnixMilli()(Go 1.17+)更安全,直接接收毫秒:time.UnixMilli(1717027200000)
  • 低于 Go 1.17 的项目别自己手算,用 time.Unix(0, ms*int64(time.Millisecond)) 更可靠

time.Parse() 格式字符串写成常见日期样式就报错

time.Parse() 不认 "yyyy-MM-dd""%Y-%m-%d" 这类惯用写法 —— 它只认 Go 自己那套魔性 Layout,本质是用一个固定时间点 "Mon Jan 2 15:04:05 MST 2006" 的格式做模板。写错一位、多空格、少时区都会 panic。

阅读全文

本文共计932个文字,预计阅读时间需要4分钟。

如何使用Go语言time包的Layout函数精确转换时间戳为日期格式?

`Go` 的 `time.Unix()` 函数接受两个参数,第一个是自 Unix 纪元(1970年1月1日00:00:00 UTC)以来的秒数,第二个是纳秒数。很多人误将毫秒数当作秒数传递,导致结果为1970年的日期。例如,`time.Unix(1717027200000, 0)` 实际上是1717年,因为Go将其视为秒数。

  • 毫秒时间戳要先除以 1000 得秒数,余数转纳秒:time.Unix(ms/1000, (ms%1000)*1e6)
  • time.UnixMilli()(Go 1.17+)更安全,直接接收毫秒:time.UnixMilli(1717027200000)
  • 低于 Go 1.17 的项目别自己手算,用 time.Unix(0, ms*int64(time.Millisecond)) 更可靠

time.Parse() 格式字符串写成常见日期样式就报错

time.Parse() 不认 "yyyy-MM-dd""%Y-%m-%d" 这类惯用写法 —— 它只认 Go 自己那套魔性 Layout,本质是用一个固定时间点 "Mon Jan 2 15:04:05 MST 2006" 的格式做模板。写错一位、多空格、少时区都会 panic。

阅读全文