从带有golang time的mongoDB中解析日期,Now()

eqoofvh9  于 2023-03-06  发布在  Go
关注(0)|答案(2)|浏览(171)
    • bounty将在4天后过期**。回答此问题可获得+50的声望奖励。Mike3355正在寻找规范答案

我正在通过time.Now()使用Go创建一个日期,它将其存储在mongoDB中,没有任何问题。日期看起来像2023-02-28T20:10:46.140+00:00
然而,当我尝试检索它时,我得到一个错误,内容如下:

{{"code":2, "message":"parsing time \"2023-02-28 20:10:46.14 +0000 UTC\" as \"2006-01-02T15:04:05Z07:00\": cannot parse \" 20:10:46.14 +0000 UTC\" as \"T\"", "details":[]}

它来自这段代码。

createdAt, err := time.Parse(time.RFC3339, blog.CreatedAt.String())
if err != nil {
    return nil, err
}
updatedAt, err := time.Parse(time.RFC3339, blog.UpdatedAt.String())
if err != nil {
    return nil, err
}

tempBlog := &api.Blog{
    Id: blog.ID,
    CreatedAt: timestamppb.New(createdAt),
    UpdatedAt: timestamppb.New(updatedAt),

我找到了一些有用的文档herehere,并手动添加了解析到Mongo中的时间,但我仍然遇到了这个问题。
我已经尝试了所有的时间格式,但它只是导致了一个不同的错误,无法解析。
建议?

2hh7jdfx

2hh7jdfx1#

你的输入格式(2023-02-28 20:10:46.14 +0000 UTC),如你的错误信息所示,不能被time.parse函数识别,因为它不是你在函数中调用的RFC 3339格式。我不使用很多内置函数,但这个'format'函数会给予你你所需要的

inputs := "2023-02-28 20:10:46.14 +0000 UTC"
extime, _ := time.Parse("2006-01-02 15:04:05 -0700 MST", inputs)
fmt.Println("Time : ", extime)

结果

Time :  2023-02-28 20:10:46.14 +0000 UTC

如果您需要将其返回到RFC 3339以导出,请使用

fmt.Println("RFC3339 : ", extime.Format("2006-01-02T15:04:05Z07:00"))

它会给予你一个结果

RFC3339 :  2023-02-28T20:10:46Z

注意,在UTC时间(祖鲁时间)中,RFC 3339不要求仅给予时间修改Z。例如,如果您使用-0700 MST而不是+0000 UTC,则结果将为

RFC3339 :  2023-02-28T20:10:46-07:00
lhcgjxsq

lhcgjxsq2#

用于time.parse的布局是time.RFC33392006-01-02T15:04:05Z07:00
我在解析来自Elastic的时间时收到了类似的消息,但通过删除尾随的07:00可以解决它。尝试使用自定义布局2006-01-02T15:04:05Z而不是RFC3339。

相关问题