You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Go time包生成无时区类RFC3339时间及带毫秒本地ISO8601时间?

关于Go语言time包时间格式化的两个问题解答

嘿,这两个问题其实都能通过Go time包内置的格式化能力优雅解决,不用自己手动拼接字符串,咱们一个个说清楚:

1. 格式化为类似RFC3339但无时区的本地时间

RFC3339的标准格式是 2006-01-02T15:04:05Z07:00,要去掉时区信息并保留本地时间,只需要自定义格式化字符串,删掉时区部分即可。

Go的时间格式化是基于参考时间 2006-01-02 15:04:05 MST 来匹配规则的,所以直接用下面的代码就能实现:

t := time.Now().Local() // 确保使用本地时区
formatted := t.Format("2006-01-02T15:04:05")
fmt.Println(formatted) // 输出示例:2024-05-20T14:30:45

如果你习惯用空格代替T分隔日期和时间,把格式字符串改成"2006-01-02 15:04:05"就行。

2. 优雅获取带毫秒精度的ISO 8601本地时间字符串

你之前手动拼接的方式确实太繁琐了,其实Go的格式化字符串支持直接指定毫秒精度——参考时间里的毫秒部分是.000,所以直接在格式字符串里加上这个部分就搞定了:

t := time.Now().Local()
msFormatted := t.Format("2006-01-02T15:04:05.000")
fmt.Println(msFormatted) // 输出示例:2024-05-20T14:30:45.123

同样,如果偏好空格分隔,格式字符串换成"2006-01-02 15:04:05.000"就好。这个方法完全利用了time包的内置能力,比手动计算秒和毫秒要简洁、可靠得多。


内容的提问来源于stack exchange,提问作者Escher

火山引擎 最新活动