golang time json mongodb 时间处理

golang 中解决前端time 输出,后端mongodb中时间存储。

package mask

import (
    "fmt"
    "time"

    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/bson/bsontype"
)

// Timestamp extension time
type Timestamp struct {
    Time time.Time
}

const (
    jsonLayout = "2006-01-02 15:04:05"
)

// Now returns the current local time.
func Now() Timestamp {
    return Timestamp{
        Time: time.Now(),
    }
}

// UnmarshalBSON unmarshal bson
func (t *Timestamp) UnmarshalBSON(data []byte) (err error) {
    var d bson.D
    err = bson.Unmarshal(data, &d)
    if err != nil {
        return err
    }
    if v, ok := d.Map()["t"]; ok {
        t.Time = time.Time{}
        return t.Time.UnmarshalText([]byte(v.(string)))
    }
    return fmt.Errorf("key 't' missing")
}

// MarshalBSON marshal bson
func (t Timestamp) MarshalBSON() ([]byte, error) {
    txt, err := t.Time.MarshalText()
    if err != nil {
        return nil, err
    }
    b, err := bson.Marshal(map[string]string{"t": string(txt)})
    return b, err
}

// MarshalBSONValue marshal bson value
func (t *Timestamp) MarshalBSONValue() (bsontype.Type, []byte, error) {
    fmt.Println(t)
    b, err := bson.Marshal(t)
    return bson.TypeEmbeddedDocument, b, err
}

// UnmarshalJSON unmarshal json
func (t *Timestamp) UnmarshalJSON(data []byte) (err error) {
    if len(data) == 0 || string(data) == "" || string(data) == `""` {
        return
    }
    now, err := time.ParseInLocation(`"`+jsonLayout+`"`, string(data), time.Local)
    *t = Timestamp{
        Time: now,
    }
    return
}

// MarshalJSON marshal json
func (t Timestamp) MarshalJSON() ([]byte, error) {

    b := make([]byte, 0, len(jsonLayout)+2)
    b = append(b, '"')
    b = time.Time(t.Time).AppendFormat(b, jsonLayout)
    b = append(b, '"')
    return b, nil
}

原文地址:https://www.cnblogs.com/warrior/p/12042029.html

时间: 2024-10-08 11:13:43

golang time json mongodb 时间处理的相关文章

将json的时间格式转换成正常的时间格式

/** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) 可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) * eg: * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 * (new Date())

Go_14:GoLang中 json、map、struct 之间的相互转化

1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母必须为大写.请看下面的例子: package commontest import ( "testing" "encoding/json" ) type Person struct { name string age int } func TestStruct2Json(

JSON日期时间格式转换

1 //JSON日期时间格式转换 2 //使用正则表达式将生日属性中的非数字(\D)删除 3 //并把得到的毫秒数转换成数字类型 4 var birthdayMilliseconds = parseInt(dateObj.replace(/\D/igm, "")); 5 //实例化一个新的日期格式,使用1970 年 1 月 1 日至今的毫秒数为参数 6 var date = new Date(birthdayMilliseconds); 7 var dateStr = date.toL

golang结构体json的时间格式化解决方案

最近开发项目时候发现一个结构体的Json转换的时间格式问题. 即这种1993-01-01T20:08:23.000000028+08:00 这种表示UTC方法.从我们习惯来说,更喜欢希望的是 1993-01-01 20:08:23这种格式. 重新复现代码如下: package main import (     "time"     "encoding/json" ) type Student struct {     Name string     `json:&

Golang高性能json包:easyjson

简介 easyjson是什么呢? 根据官网介绍,easyjson是提供高效快速且易用的结构体structs<-->json转换包.easyjson并没有使用反射方式实现,所以性能比其他的json包该4-5倍,比golang 自带的json包快2-3倍. easyjson目标是维持生成去代码简单,以致于它可以轻松地进行优化或固定. 安装 go get -u github.com/mailru/easyjson/go install  github.com/mailru/easyjson/easy

MongoDB时间类型

mongdb时间类型 Date() 显示当前的时间 new Date 构建一个格林尼治时间   可以看到正好和Date()相差8小时,我们是+8时区,也就是时差相差8,所以+8小时就是系统当前时间 ISODate() 也是格林尼治时间 > Date() Sun Jan 24 2016 20:39:57 GMT+0800 (CST) > new Date() ISODate("2016-01-24T12:40:24.035Z") > ISODate() ISODate(

golang的json操作

package main import ( "encoding/json" "fmt" "os" ) type ConfigStruct struct { Host string `json:"host"` Port int `json:"port"` AnalyticsFile string `json:"analytics_file"` StaticFileVersion int `

返回json格式时间,解析时间

传入:Json格式的时间 JS如下: yyyy-M(MM)-d(dd) H(HH):m(mm):s(ss) function timeStamp2String(time) { var data=time; var datetime=new Date(parseInt(data.replace("/Date(","").replace(")/",""),10)); var year=datetime.getFullYear();

Json数据时间格式的处理

方法: 1 using Newtonsoft.Json; 2 using Newtonsoft.Json.Converters;//需引入Newtonsoft.Json.dll 3 public class ConvertHelper 4 { 5 /// <summary> 6 /// 将对象转成json格式并格式化日期:yyyy-MM-dd 7 /// </summary> 8 /// <param name="jsonObject"></p