Rumah > pembangunan bahagian belakang > Golang > Gunakan golang time.Now() untuk menghuraikan tarikh dalam mongoDB

Gunakan golang time.Now() untuk menghuraikan tarikh dalam mongoDB

WBOY
Lepaskan: 2024-02-05 23:24:12
ke hadapan
1162 orang telah melayarinya

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

Isi soalan

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":[]}
Salin selepas log masuk

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),
Salin selepas log masuk

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?


Jawapan betul


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())
}
Salin selepas log masuk

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
Salin selepas log masuk

mongo menyimpan masa seperti ini

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

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan