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
}
golang time json mongodb 时间处理的更多相关文章
- Java json设置时间格式,Jackson设置时间格式,json设置单引号
Java json设置时间格式,Jackson设置时间格式,json设置单引号 >>>>>>>>>>>>>>> ...
- C#应用Newtonsoft.Json.dll,控制json的时间格式
原文:C#应用Newtonsoft.Json.dll,控制json的时间格式 var aIsoDateTimeConverter = new IsoDateTimeConverter();aIsoDa ...
- .NET 自定义Json序列化时间格式
.NET 自定义Json序列化时间格式 Intro 和 JAVA 项目组对接,他们的接口返回的数据是一个json字符串,里面的时间有的是Unix时间戳,有的是string类型,有的还是空,默认序列化规 ...
- JSON.Net 自定义Json序列化时间格式
JSON.Net 自定义Json序列化时间格式 Intro 和 JAVA 项目组对接,他们的接口返回的数据是一个json字符串,里面的时间有的是Unix时间戳,有的是string类型,有的还是空,默认 ...
- 48 【golang】json的效率
本文将主要做如下几方面的测试: 1,构造一个[100]struct的数组,然后来测试它的json编码后的字符串 或者([]byte),首先关心它的功能是否正常: 2,在很早之前,我们在使用golang ...
- Go_14:GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- Golang 处理 Json(二):解码
golang 编码 json 还比较简单,而解析 json 则非常蛋疼.不像 PHP 一句 json_decode() 就能搞定.之前项目开发中,为了兼容不同客户端的需求,请求的 content-ty ...
- Golang 处理 Json(一):编码
JSON 是一种数据格式描述语言.以 key 和 value 构成的哈系结构,类似 Javascript 中的对象,python 中的字典.通常 json 格式的 key 是字符串,其值可以是任意类型 ...
- GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
随机推荐
- linux命令行下常用快捷键
快捷键的使用: ctrl+d或者使用logout.exit退出终端ctrl+a跳到开始ctrl+e跳到最后ctrl+u向前删除ctrl+k向后删除ctrl+c中断命令ctrl+z暂停命令 fg:将暂停 ...
- 七十:flask钩子函数之关于before_request的钩子函数
在flask中钩子函数是使用特定的装饰器装饰的函数,用于在正常执行的代码中,插入一段自己想要执行的代码(hook) before_first_request:flask项目第一次部署后指向的钩子函数, ...
- 初探ASP.NET Web API (转)
http://www.cnblogs.com/mejoy/p/6402821.html 什么是ASP.NET Web API? 官方的解释是 ASP.NET Web API is a framewor ...
- Xib中设置控件的圆角、边框效果
设置控件的圆角和边框效果有两种方式: 1.代码实现: self.myView.layer.masksToBounds = YES; self.myView.layer.cornerRadius = ; ...
- Python列表排序
1.冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就 ...
- Spring boot (一):入门篇
Spring boot 简介 Build Anything with Spring Boot:Spring Boot is the starting point for building all Sp ...
- 【VS开发】C++异常处理操作
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我知道对你来说你喜欢用re ...
- Mysql事务代码
/// <summary> /// 删除相册 /// </summary> /// <param name="id"></param> ...
- 简洁易懂说VLAN
简洁易懂说VLAN 1. VLAN概述 虚拟局域网(Virtual Local Area Network,VLAN),VLAN最主要的作用是分割局域网中广播域.传统交换机组成的LAN中,往往包含了成千 ...
- sqlalchemy一对多的关系
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Text ...