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":[]}
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),
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?
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()) }
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
Mongo speichert die Zeit so
> db.demo.find().pretty() { "_id" : ObjectId("6406a0ce4cfff0411ca8d98b"), "name" : "demo", "createTime" : ISODate("2023-03-07T02:26:22.433Z") }
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!