我正在透過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中文網其他相關文章!