首頁  >  文章  >  後端開發  >  使用 golang time.Now() 解析 mongoDB 中的日期

使用 golang time.Now() 解析 mongoDB 中的日期

WBOY
WBOY轉載
2024-02-05 23:24:121097瀏覽

使用 golang time.Now() 解析 mongoDB 中的日期

問題內容

我正在透過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),

我在這裡和這裡找到了一些有用的文檔,並將手動解析的時間添加到 mongo 中,但我仍然遇到了這個問題。

我已經嘗試了所有時間格式,但它只會導致無法解析的不同錯誤。

建議?


正確答案


如果您儲存 time.time mongodb 會自動為您檢索它。檢索到的時間為 utc 時間,如果您想變更為本機時區,請使用 time.local()

package date_test

import (
    "context"
    "github.com/stretchr/testify/require"
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "os"
    "testing"
    "time"
)

type something struct {
    name       string    `json:"name" bson:"name"`
    createtime time.time `json:"createtime" bson:"createtime"`
}

func testdate(t *testing.t) {
    raw := something{name: "demo", createtime: time.now()}
    t.logf("raw: %v", raw)
    ctx, cancel := context.withtimeout(context.background(), 20*time.second)
    defer cancel()
    client, err := mongo.connect(ctx, options.client().applyuri(os.getenv("uri")))
    require.noerror(t, err)
    collection := client.database("test").collection("demo")
    _, err = collection.insertone(ctx, raw)
    require.noerror(t, err)
    var res something
    err = collection.findone(ctx, bson.d{{"name", raw.name}}).decode(&res)
    require.noerror(t, err)
    t.logf("res: %v", res)
    t.logf("local time: %v", res.createtime.local())
}

運行測試程式碼,它將列印類似這樣的內容

$ uri="mongodb://127.0.0.1:27017/" go test -v ./date_test.go
=== run   testdate
    date_test.go:21: raw: {demo 2023-03-07 10:26:22.433473 +0800 cst m=+0.009080292}
    date_test.go:32: res: {demo 2023-03-07 02:26:22.433 +0000 utc}
    date_test.go:33: local time: 2023-03-07 10:26:22.433 +0800 cst
--- pass: testdate (0.01s)
pass
ok      command-line-arguments  0.912s

mongo 像這樣儲存時間

> db.demo.find().pretty()
{
    "_id" : ObjectId("6406a0ce4cfff0411ca8d98b"),
    "name" : "demo",
    "createTime" : ISODate("2023-03-07T02:26:22.433Z")
}

原始碼在這裡https://gist.github.com/alex-x -加密/14c15d4921f1ece2962302cce87c97a8

以上是使用 golang time.Now() 解析 mongoDB 中的日期的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除