go-carbon v2.3.2 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

gouguoyin · · 247 次点击 · 开始浏览    置顶

carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。 目前已被 [awesome-go]( https://github.com/avelino/awesome-go#date-and-time "awesome-go") 收录,如果您觉得不错,请给个 star 吧 [github.com/golang-module/carbon]( https://github.com/golang-module/carbon "github.com/golang-module/carbon") [gitee.com/golang-module/carbon]( https://gitee.com/golang-module/carbon "gitee.com/golang-module/carbon") #### 安装使用 ##### Golang 版本大于等于 1.16 ```go // 使用 github 库 go get -u github.com/golang-module/carbon/v2 import "github.com/golang-module/carbon/v2" // 使用 gitee 库 go get -u gitee.com/golang-module/carbon/v2 import "gitee.com/golang-module/carbon/v2" ``` ##### Golang 版本小于 1.16 ```go // 使用 github 库 go get -u github.com/golang-module/carbon import "github.com/golang-module/carbon" // 使用 gitee 库 go get -u gitee.com/golang-module/carbon import "gitee.com/golang-module/carbon" ``` ##### 定义模型 ```go type Person struct { Name string `json:"name"` Age int `json:"age"` Birthday1 Carbon `json:"birthday1"` Birthday2 Carbon `json:"birthday2" carbon:"date" tz:"PRC"` Birthday3 Carbon `json:"birthday3" carbon:"time" tz:"PRC"` Birthday4 Carbon `json:"birthday4" carbon:"dateTime" tz:"PRC"` Birthday5 Carbon `json:"birthday5" carbon:"timestamp" tz:"PRC"` Birthday6 Carbon `json:"birthday6" carbon:"timestampMilli" tz:"PRC"` Birthday7 Carbon `json:"birthday7" carbon:"timestampMicro" tz:"PRC"` Birthday8 Carbon `json:"birthday8" carbon:"timestampNano" tz:"PRC"` } ``` 或 ```go type Person struct { Name string `json:"name"` Age int `json:"age"` Birthday1 Carbon `json:"birthday1"` Birthday2 Carbon `json:"birthday2" carbon:"layout:2006-01-02" tz:"PRC"` Birthday3 Carbon `json:"birthday3" carbon:"layout:15:04:05" tz:"PRC"` Birthday4 Carbon `json:"birthday4" carbon:"layout:2006-01-02 15:04:05" tz:"PRC"` Birthday5 Carbon `json:"birthday5" carbon:"timestamp" tz:"PRC"` Birthday6 Carbon `json:"birthday6" carbon:"timestampMilli" tz:"PRC"` Birthday7 Carbon `json:"birthday7" carbon:"timestampMicro" tz:"PRC"` Birthday8 Carbon `json:"birthday8" carbon:"timestampNano" tz:"PRC"` } ``` 或 ```go type Person struct { Name string `json:"name"` Age int `json:"age"` Birthday1 Carbon `json:"birthday1"` Birthday2 Carbon `json:"birthday2" carbon:"format:Y-m-d" tz:"PRC"` Birthday3 Carbon `json:"birthday3" carbon:"format:H:i:s" tz:"PRC"` Birthday4 Carbon `json:"birthday4" carbon:"format:Y-m-d H:i:s" tz:"PRC"` Birthday5 Carbon `json:"birthday5" carbon:"timestamp" tz:"PRC"` Birthday6 Carbon `json:"birthday6" carbon:"timestampMilli" tz:"PRC"` Birthday7 Carbon `json:"birthday7" carbon:"timestampMicro" tz:"PRC"` Birthday8 Carbon `json:"birthday8" carbon:"timestampNano" tz:"PRC"` } ``` > 如果 `carbon` 标签没有设置,默认是 `layout:2006-01-02 15:04:05`;如果 `tz` 标签没有设置,默认是 `Local` ##### 实例化模型 ```go now := Parse("2020-08-05 13:14:15", PRC) person := Person { Name: "gouguoyin", Age: 18, Birthday1: now, Birthday2: now, Birthday3: now, Birthday4: now, Birthday5: now, Birthday6: now, Birthday7: now, Birthday8: now, } ``` ##### JSON 编码 ```go loadErr := carbon.LoadTag(&person) if loadErr != nil { // 错误处理 log.Fatal(loadErr) } data, marshalErr := json.Marshal(person) if marshalErr != nil { // 错误处理 log.Fatal(marshalErr) } fmt.Printf("%s", data) // 输出 { "name": "gouguoyin", "age": 18, "birthday1": "2020-08-05 13:14:15", "birthday2": "2020-08-05", "birthday3": "13:14:15", "birthday4": "2020-08-05 13:14:15", "birthday5": 1596604455, "birthday6": 1596604455999, "birthday7": 1596604455999999, "birthday8": 1596604455999999999 } ``` ##### JSON 解码 ```go str := `{ "name": "gouguoyin", "age": 18, "birthday1": "2020-08-05 13:14:15", "birthday2": "2020-08-05", "birthday3": "13:14:15", "birthday4": "2020-08-05 13:14:15", "birthday5": 1596604455, "birthday6": 1596604455999, "birthday7": 1596604455999999, "birthday8": 1596604455999999999 }` var person Person loadErr := carbon.LoadTag(&person) if loadErr != nil { // 错误处理 log.Fatal(loadErr) } unmarshalErr := json.Unmarshal([]byte(str), &person) if unmarshalErr != nil { // 错误处理 log.Fatal(unmarshalErr) } fmt.Sprintf("%s", person.Birthday1) // 2002-08-05 13:14:15 fmt.Sprintf("%s", person.Birthday2) // 2020-08-05 fmt.Sprintf("%s", person.Birthday3) // 13:14:15 fmt.Sprintf("%s", person.Birthday4) // 2002-08-05 13:14:15 fmt.Sprintf("%d", person.Birthday5) // 1596604455 fmt.Sprintf("%d", person.Birthday6) // 1596604455999 fmt.Sprintf("%d", person.Birthday7) // 1596604455999999 fmt.Sprintf("%d", person.Birthday8) // 1596604455999999999 ``` #### 更新日志 - 新增 `tag` 结构体,优化 `LoadTag` 方法 - 将 `encoding.go` 文件中 `MarshalJSON` 方法新增对 `U`,`V`,`X`,`Z` 的解析 - 优化 `database.go` 文件中的 `Scan` 方法,将默认时区设置为 `Local` - 优化 `outputer.go` 文件中 `String` 方法 - `CreateFromStdTime` 方法新增 `timezone` 可选参数 - 新增 `India` 时区常量 - 提高性能测试覆盖率

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

247 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传