登录
首页 >  Golang >  Go问答

在Golang中,RFC3339Nano时间戳与Unix时间戳之间的转换是否可靠?

来源:stackoverflow

时间:2024-03-21 20:03:35 151浏览 收藏

在 Go 语言中,使用 RFC3339Nano 时间戳和 Unix 时间戳转换时,存在潜在风险,即无法完全恢复原始时间戳。虽然这两种时间戳最初都是从同一个 `time.Time` 结构生成的,但闰秒的特殊性可能导致转换后出现差异。如果使用 RFC3339Nano 时间戳存储在数据库中,而稍后需要重新验证哈希值,则可能存在错误地使签名无效的风险。

问题内容

在我的 golang 应用程序中,我使用 Unix 第二分辨率时间戳(使用 time.Now().UTC().Unix() 生成)作为用于请求身份验证的哈希函数中盐的一部分。

希望将此时间戳存储在数据存储中,其中约定是由 golang RFC3339Nano 函数生成的 RFC3339 纳秒分辨率时间戳字符串,以及用于身份验证的哈希值。

问题:如果稍后需要重新验证哈希值,是否存在 RFC3339Nano 无法完全反转为原始 Unix 时间戳的风险?

我知道适用于 Unix 时间戳的闰秒存在一些问题;通过 RFC3339Nano 的往返是否有可能会导致不同的时间戳,从而错误地使签名无效?

RFC3339Nano时间戳和Unix时间戳是从同一个time.Time结构生成的。

我倾向于认为它会起作用,因为闰秒在发生当天会产生额外的 61 秒,我预计这会映射回与前一秒相同的 Unix 时间戳。但反过来显然会失败。


解决方案


我认为你无缘无故地遭受这种麻烦,为什么不直接使用 Unix() 存储到数据库并用它恢复呢?

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《在Golang中,RFC3339Nano时间戳与Unix时间戳之间的转换是否可靠?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>