Heim > Backend-Entwicklung > Golang > Verwenden Sie golang time.Now(), um Daten in mongoDB zu analysieren

Verwenden Sie golang time.Now(), um Daten in mongoDB zu analysieren

WBOY
Freigeben: 2024-02-05 23:24:12
nach vorne
1127 Leute haben es durchsucht

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

Frageninhalt

Ich bestehe time.now() 使用 go 创建一个日期,并将其存储在 mongodb 中,没有任何问题。日期看起来像 2023-02-28t20:10:46.140+00:00.

Wenn ich jedoch versuche, es abzurufen, erhalte ich eine Fehlermeldung:

{{"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":[]}
Nach dem Login kopieren

Es kommt von diesem Code.

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),
Nach dem Login kopieren

Ich habe hier und hier einige hilfreiche Dokumentationen gefunden und manuell analysierte Zeiten zu Mongo hinzugefügt, aber ich stecke immer noch bei diesem Problem fest.

Ich habe alle Zeitformate ausprobiert, aber es kommt zu verschiedenen Fehlern, die nicht analysiert werden können.

Vorschläge?


Richtige Antwort


wenn Sie time.time mongodb 会自动为您检索它。检索到的时间为 utc 时间,如果您想更改为本地时区,请使用 time.local() speichern.

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())
}
Nach dem Login kopieren

Führen Sie den Testcode aus und es wird etwa Folgendes gedruckt

$ 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
Nach dem Login kopieren

Mongo speichert die Zeit so

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

Der Quellcode ist hierhttps://gist.github.com/alex-x-encryption/14c15d4921f1ece2962302cce87c97a8

Das obige ist der detaillierte Inhalt vonVerwenden Sie golang time.Now(), um Daten in mongoDB zu analysieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage