首页 >后端开发 >Golang >如何将 MongoDB 字符串日期转换为 Go 时间?

如何将 MongoDB 字符串日期转换为 Go 时间?

Susan Sarandon
Susan Sarandon原创
2024-11-16 14:54:02454浏览

How to Convert MongoDB String Dates to Go Time?

从 Go 访问 MongoDB:将 MongoDB 字符串日期转换为 Go 时间

您的代码片段显示您正在从 Go 访问 MongoDB 并遇到将 MongoDB 字符串日期转换为 Go Time 的挑战。提供的 clientConfigData 结构包含一个声明为字符串的 EndDate 字段,与 MongoDB 的存储格式匹配。但是,您需要将此日期作为 Go Time 值访问。

自定义编组和解组

要实现此转换,请考虑实现自定义编组和解组逻辑。通过实现 bson.Getter 和 bson.Setter 接口,您可以控制编组和解组过程中的值转换。

扩展 clientConfigData 结构

扩展 clientConfigData 结构包含一个 time.Time 类型的附加 EndDate 字段(所需值type):

type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"` // bson tag "-" excludes this field from MongoDB
}

自定义编组和解组函数

为 clientConfigData 定义自定义编组和解组函数struct:

const endDateLayout = "2006-01-02 15:04:05" // Customizable date layout

func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}

说明

  • SetBSON():使用原始 MongoDB 值填充结构并将 EndDateStr 字段解析为 EndDate 类型的字段time.Time.
  • GetBSON():设置 EndDateStr字段并返回 clientConfigData 结构进行保存。

使用新字段

现在,您可以使用 EndDate 字段来访问日期作为 Go Time 值。当读取数据并将其保存到 MongoDB 时,自定义编组和解组逻辑将自动在字符串和时间格式之间进行转换。

以上是如何将 MongoDB 字符串日期转换为 Go 时间?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn