Saya lulus time.now()
使用 go 创建一个日期,并将其存储在 mongodb 中,没有任何问题。日期看起来像 2023-02-28t20:10:46.140+00:00
.
Namun, apabila saya cuba mendapatkannya, saya mendapat mesej ralat:
{{"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":[]}
Ia datang daripada kod ini.
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),
Saya menemui beberapa dokumentasi yang berguna di sini dan di sini dan menambah penghuraian manual masa ke mongo, tetapi saya masih terperangkap dengan masalah ini.
Saya telah mencuba semua format masa tetapi ia hanya menghasilkan ralat yang berbeza yang tidak dapat dihuraikan.
Cadangan?
jika anda simpan 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()) }
Jalankan kod ujian dan ia akan mencetak sesuatu seperti ini
$ 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 menyimpan masa seperti ini
> db.demo.find().pretty() { "_id" : ObjectId("6406a0ce4cfff0411ca8d98b"), "name" : "demo", "createTime" : ISODate("2023-03-07T02:26:22.433Z") }
Kod sumber di sinihttps://gist.github.com/alex-x-encryption/14c15d4921f1ece2962302cce87c97a8
Atas ialah kandungan terperinci Gunakan golang time.Now() untuk menghuraikan tarikh dalam mongoDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!