针对在Golang中以外发JSON格式设置时间戳?和golang时间戳这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展golang字符串json格式解析、Golang中如何设置时间、gola
针对在Golang中以外发JSON格式设置时间戳?和golang 时间戳这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展golang 字符串 json格式解析、Golang中如何设置时间、golang中时间戳格式化、golang多种方式设置时区等相关知识,希望可以帮助到你。
本文目录一览:在Golang中以外发JSON格式设置时间戳?(golang 时间戳)
我最近一直在玩Go,它很棒。在浏览文档和博客文章之后,我似乎无法弄清楚的事情是如何将time.Time
类型格式化为我想要的格式,json.NewEncoder.Encode
这是一个最小的代码示例:
package maintype Document struct { Name string Content string Stamp time.Time Author string}func sendResponse(data interface{}, w http.ResponseWriter, r * http.Request){ _, err := json.Marshal(data) j := json.NewEncoder(w) if err == nil { encodedErr := j.Encode(data) if encodedErr != nil{ //code snipped } }else{ //code snipped }}func main() { http.HandleFunc("/document", control.HandleDocuments) http.ListenAndServe("localhost:4000", nil)}func HandleDocuments(w http.ResponseWriter,r *http.Request) { w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Origin", "*") switch r.Method { case "GET": //logic snipped testDoc := model.Document{"Meeting Notes", "These are some notes", time.Now(), "Bacon"} sendResponse(testDoc, w,r) } case "POST": case "PUT": case "DELETE": default: //snipped }}
理想情况下,我想发送一个请求并以类似的方式获取“戳记”字段,May 15,2014
而不是2014-05-16T08:28:06.801064-04:00
但是我不确定如何,我知道我可以添加json:stamp
到文档类型声明中以使用名称戳而不是戳来编码字段,但是我不知道这些类型的东西叫什么,所以我我什至不确定要在Google上查找什么,以了解其中是否还有某种格式设置选项。
是否有人链接到示例或优质文档页面上有关这些类型标记(或称为它们的名称)主题的链接,或者我如何告诉JSON编码器处理time.Time
字段?
仅供参考,我查看了以下页面:这里和这里,当然还有官方文档
答案1
小编典典您可以做的是,将time.Time包装为您自己的自定义类型,并使其实现Marshaler
接口:
type Marshaler interface { MarshalJSON() ([]byte, error)}
因此,您要做的是:
type JSONTime time.Timefunc (t JSONTime)MarshalJSON() ([]byte, error) { //do your serializing here stamp := fmt.Sprintf("\"%s\"", time.Time(t).Format("Mon Jan _2")) return []byte(stamp), nil}
并制作文件:
type Document struct { Name string Content string Stamp JSONTime Author string}
并使您的初始化看起来像:
testDoc := model.Document{"Meeting Notes", "These are some notes", JSONTime(time.Now()), "Bacon"}
就是这样。如果您想拆封,也可以使用该Unmarshaler
界面。
golang 字符串 json格式解析
最近在用golang写关于微信方面的东西,首先遇到的就是将字符串转换成golang的json格式,利用corpid和corpsecret返回的是一个json格式的字符串,其格式如下:
{"access_token":"uAUS6o5g-9rFWjYt39LYa7TKqiMVsIfCGPEN4IZzdAk5-T-ryVhL7xb8kYciuU_m","expires_in":7200}
我们可以把它转换成一个map[string]interface{}类型的数据,相关代码如下:
str:="{\"access_token\":\"uAUS6o5g-9rFWjYt39LYa7TKqiMVsIfCGPEN4IZzdAk5-T-ryVhL7xb8kYciuU_m\",\"expires_in\":7200}" var dat map[string]interface{} if err := json.Unmarshal([]byte(str),&dat); err == nil { fmt.Println(dat) fmt.Println(dat["expires_in"]) } else { fmt.Println(err) }
运行的结果如下:
map[access_token:uAUS6o5g-9rFWjYt39LYa7TKqiMVsIfCGPEN4IZzdAk5-T-ryVhL7xb8kYciuU_m expires_in:7200] 7200
我们还可以定义一个结构体,将数据转换成对应的结构体对象,再获取相应的数据,定义一个weixintoken结构体:
type weixintoken struct { Tokens string `json:"access_token"` Expires int `json:"expires_in"` }
注意相应变量首字母的大小写(首字母小写不可见,大写可见,具体查看golang的变量相关的内容),将JSON绑定到结构体,结构体的字段一定要大写,否则不能绑定数据。
ret:="{\"access_token\":\"uAUS6o5g-9rFWjYt39LYa7TKqiMVsIfCGPEN4IZzdAk5-T-ryVhL7xb8kYciuU_m\",\"expires_in\":7200}" var config weixintoken if err := json.Unmarshal([]byte(ret),&config); err == nil { fmt.Println(config) fmt.Println(config.Tokens) }else { fmt.Println(err) }
运行结果如下:
{"access_token":"uAUS6o5g-9rFWjYt39LYa7TKqiMVsIfCGPEN4IZzdAk5-T-ryVhL7xb8kYciuU_m","expires_in":7200} {uAUS6o5g-9rFWjYt39LYa7TKqiMVsIfCGPEN4IZzdAk5-T-ryVhL7xb8kYciuU_m 7200}
参考:http://golangtc.com/t/5322b2ea320b523f0a000075
http://www.tuicool.com/articles/BFruI3
http://www.cnblogs.com/fengbohello/p/4665883.html
https://segmentfault.com/q/1010000005025933/a-1020000005032034
http://www.cnblogs.com/go-ios/p/3906251.html
http://www.jb51.cc/article/p-geszyymz-xp.html
Golang中如何设置时间
golang是一种流行的编程语言,它提供了一种灵活的时间管理机制。在许多应用程序中,时间处理是必不可少的部分。本文将介绍golang中如何设置时间,并提供一些实用技巧。
- 概述
处理时间的方式在各种编程语言中都不同。在Golang中,时间是一个包含年、月、日、小时、分钟、秒和纳秒的结构体。Golang使用time包来处理时间。
- 获取当前时间
我们从最基本的例子开始:获取当前时间。可以使用now()函数来获取当前时间。如下所示:
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Printf("Current time: %d-%02d-%02d %02d:%02d:%02d\n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second()) }
输出结果如下:
Current time: 2021-08-16 15:16:09
- 设置时间
在Golang中,可以使用time.Date()函数创建一个新的时间实例。这个函数的参数分别是年、月、日、小时、分钟、秒和纳秒。例如,下面的示例创建了一个时间为2022年1月1日的对象:
立即学习“go语言免费学习笔记(深入)”;
package main import ( "fmt" "time" ) func main() { t := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC) fmt.Println(t) }
输出结果如下:
2022-01-01 00:00:00 +0000 UTC
- 更改时间
可以使用time.Add()函数在现有时间上添加某个时间段来更改时间。例如,下面的示例将当前时间增加了2分钟:
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println("Current time:", now.Format("2006-01-02 15:04:05")) later := now.Add(2 * time.Minute) fmt.Println("Time in 2 minutes:", later.Format("2006-01-02 15:04:05")) }
输出结果如下:
Current time: 2021-08-16 16:00:14 Time in 2 minutes: 2021-08-16 16:02:14
- 解析时间字符串
如果要从字符串中解析时间,可以使用time.Parse()函数。该函数需要一个时间布局(layout)参数,指定所需格式。例如,下面的示例将字符串"2022-01-01"解析为一个时间对象:
package main import ( "fmt" "time" ) func main() { str := "2022-01-01" layout := "2006-01-02" t, err := time.Parse(layout, str) if err != nil { fmt.Println(err) } fmt.Println(t) }
输出结果如下:
2022-01-01 00:00:00 +0000 UTC
- 总结
在本文中,我们介绍了Golang中设置时间及其相关操作的方法。可以使用time包来获取当前时间、设置新的时间、更改现有时间以及解析时间字符串。这些技巧将有助于管理时间,并在Golang应用程序中实现时间操作。
以上就是Golang中如何设置时间的详细内容,更多请关注php中文网其它相关文章!
golang中时间戳格式化
var t int64 = time.Now().Unix() var s string = time.Unix(t,0).Format("2006-01-02 15:04:05") println(s)
这方式比较特别,按照123456来记忆吧:01月02号 下午3点04分05秒 2006年
golang多种方式设置时区
关于我
文章首发 | 我的博客 | 欢迎关注
go语言的time.Now()返回的是当地时区时间
time.Now().Format("2006-01-02 15:04:05")
time设置自定义时区
var cstSh, _ = time.LoadLocation("Asia/Shanghai") //上海
fmt.Println("SH : ", time.Now().In(cstSh).Format("2006-01-02 15:04:05"))
LoadLocation 有个问题,它依赖于 IANA Time Zone Database (简称 tzdata 吧) 这个数据库,一般linux系统都带了,但是windows系统就没带。所以如果windows系统没有安装go环境,调用LoadLocation就会报错。
当前解决方法也有:
1、我们可以自己把tzdata文件放到自己的程序目录中,然后让 time 包能够从我们自己的程序目录中加载时区文件就可以了。
文件目录可以通过环境变量设置,在main方法中:
os.Setenv("ZONEINFO", ''/home/tz/data.zip'')
然后再调用 LoadLocation 方法就可以了。
下载tzdata
2、使用时区方式 推荐方式
var cstZone = time.FixedZone("CST", 8*3600) // 东八区
fmt.Println("SH : ", time.Now().In(cstZone).Format("2006-01-02 15:04:05"))
全局设置
如果说要设置全局的time时区配置应该如何做?
main.go(主函数处)增加一个初始化方法
func initInMain() {
var cstZone = time.FixedZone("CST", 8*3600) // 东八
time.Local = cstZone
}
将定义的时区实例赋值给time.Local
推荐阅读
Redis工具收费后新的开源已出现
GitHub上Star最高的工程师技能图谱
中国程序员最容易发错的单词
推荐!!! Markdown图标索引网站
最后
本文到此结束,希望对你有帮助
如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
更多精彩技术文章汇总在我的 公众号【程序员工具集]】,持续更新,欢迎关注订阅收藏
我们今天的关于在Golang中以外发JSON格式设置时间戳?和golang 时间戳的分享就到这里,谢谢您的阅读,如果想了解更多关于golang 字符串 json格式解析、Golang中如何设置时间、golang中时间戳格式化、golang多种方式设置时区的相关信息,可以在本站进行搜索。
本文标签: