V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
gouguoyin
V2EX  ›  Go 编程语言

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

  •  2
     
  •   gouguoyin · 2023-12-01 09:44:53 +08:00 · 1721 次点击
    这是一个创建于 387 天前的主题,其中的信息可能已经有所发展或是发生改变。

    carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。

    目前已被 awesome-go 收录,如果您觉得不错,请给个 star 吧

    github.com/golang-module/carbon

    gitee.com/golang-module/carbon

    安装使用

    Golang 版本大于等于 1.16
    // 使用 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
    // 使用 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"
    
    更新日志
    • 修复 ToWeekString ToShortWeekString 方法忽略 SetWeekStartsAt 设置的 bug
    • 增加 Parse 方法更多解析格式的支持
    • timezone[len(timezone)-1] 更改为 timezone[0]
    • 提高 Fastest 方法的单元测试覆盖率
    • 修复文档拼写错误
    28 条回复    2023-12-29 11:14:29 +08:00
    Masoud2023
        1
    Masoud2023  
       2023-12-01 09:52:53 +08:00   ❤️ 1
    这 api 做的真好看, 赞
    zyxk
        2
    zyxk  
       2023-12-01 11:24:00 +08:00   ❤️ 1
    很不错, 说明很清晰,虽然还没用过
    fgwmlhdkkkw
        3
    fgwmlhdkkkw  
       2023-12-01 11:32:41 +08:00
    Add(amount int, unit Unit)
    Sub(amounr int, unit Unit)
    pkoukk
        4
    pkoukk  
       2023-12-01 11:39:53 +08:00
    提一个小小的需求:希望有个 API 可以提供,指定 time 的这个月,有多少天。
    gouguoyin
        5
    gouguoyin  
    OP
       2023-12-01 11:46:20 +08:00
    @fgwmlhdkkkw 这样处理会面临溢出问题,有些方法是需要处理月份是否溢出问题,比如 `2023-01-31`,增加一个月,就需要考虑是否跨月。目前是分成两类方法,如 `AddMonths` 和 `AddMonthsNoOverflow`
    ```go
    carbon.Parse("2020-01-31 13:14:15").AddMonth().ToDateTimeString() // 2020-03-02 13:14:15

    carbon.Parse("2020-01-31 13:14:15").AddMonthNoOverflow().ToDateTimeString() // 2020-02-29 13:14:15
    ```
    gouguoyin
        6
    gouguoyin  
    OP
       2023-12-01 11:47:57 +08:00   ❤️ 1
    @pkoukk 已有,更多查看文档 https://github.com/golang-module/carbon#getter

    carbon.Parse("2020-02-01 13:14:15").DaysInMonth() // 29
    carbon.Parse("2020-04-01 13:14:15").DaysInMonth() // 30
    carbon.Parse("2020-08-01 13:14:15").DaysInMonth() // 31
    gouguoyin
        7
    gouguoyin  
    OP
       2023-12-01 11:49:06 +08:00
    @pkoukk 还有指定年有多少天的方法 DaysInYear
    pkoukk
        8
    pkoukk  
       2023-12-01 11:58:09 +08:00
    @gouguoyin #6 棒!
    sakuramanstein
        9
    sakuramanstein  
       2023-12-01 12:32:31 +08:00 via Android
    为啥叫 carbon ,最近需求时间处理有点多,正好看看
    RedisMasterNode
        10
    RedisMasterNode  
       2023-12-01 12:46:41 +08:00
    已 star 建议补充 benchmark
    lesismal
        11
    lesismal  
       2023-12-01 12:55:19 +08:00
    @sakuramanstein #9

    我猜是因为 “碳同位素定年法”
    fgwmlhdkkkw
        12
    fgwmlhdkkkw  
       2023-12-01 12:57:19 +08:00
    @gouguoyin #5 至少提供这样的通用接口,剩下的是用户的责任。
    CEBBCAT
        13
    CEBBCAT  
       2023-12-01 13:24:27 +08:00
    感谢分享,看到两边 go.mod 的 package 是不同的,是手动维护的吗?或者用脚本替换?
    ruooooooli
        14
    ruooooooli  
       2023-12-01 13:25:55 +08:00
    为啥我这样引入不了
    ruooooooli
        15
    ruooooooli  
       2023-12-01 13:26:45 +08:00
    手残按错了,补充下问题

    import "github.com/golang-module/carbon/v2"

    我的版本是:go version go1.18.10 darwin/arm64
    gouguoyin
        16
    gouguoyin  
    OP
       2023-12-01 13:39:22 +08:00
    @CEBBCAT 两边 go.mod 的 package 是不同的?那两边?
    gouguoyin
        17
    gouguoyin  
    OP
       2023-12-01 13:40:02 +08:00
    @RedisMasterNode 后面会补充的
    CEBBCAT
        19
    CEBBCAT  
       2023-12-01 13:45:39 +08:00
    @ruooooooli #15 我 go get github.com/golang-module/carbon/v2 可以的,你那边报什么错误?
    moell
        20
    moell  
       2023-12-01 13:46:09 +08:00   ❤️ 1
    @sakuramanstein PHP 有个 composer 包叫 carbon ,非常好用,API 参考了
    Rache1
        21
    Rache1  
       2023-12-01 13:49:08 +08:00
    @sakuramanstein #9 目测是 PHP 转 GO 的,Carbon 在 PHP 这边是一个很知名的包。

    大致看了一下 API ,几乎都一样了。

    原包下面提到来自:

    Radiocarbon dating - Wikipedia
    https://en.wikipedia.org/wiki/Radiocarbon_dating?useskin=vector
    ruooooooli
        22
    ruooooooli  
       2023-12-01 14:03:43 +08:00
    @CEBBCAT #19


    go get -u github.com/golang-module/carbon/v2
    cannot find package "github.com/golang-module/carbon/v2" in any of:
    /opt/homebrew/Cellar/[email protected]/1.18.10/libexec/src/github.com/golang-module/carbon/v2 (from $GOROOT)
    /Users/zk/Work/code/go/src/github.com/golang-module/carbon/v2 (from $GOPATH)

    难道是要开启 gomodule 么
    gouguoyin
        23
    gouguoyin  
    OP
       2023-12-01 14:05:44 +08:00
    @CEBBCAT 不同地址就是不同的包,但是 api 都一样,gitee 只是为了方便国内用户使用。
    gouguoyin
        24
    gouguoyin  
    OP
       2023-12-01 14:09:57 +08:00
    @ruooooooli 必须开启 go module
    ruooooooli
        25
    ruooooooli  
       2023-12-01 16:01:29 +08:00
    @gouguoyin #24 😄好的我试下
    gouguoyin
        26
    gouguoyin  
    OP
       2023-12-01 16:27:19 +08:00   ❤️ 1
    @ruooooooli go 从 1.11 后就开始使用 module 作为唯一包管理工具
    CEBBCAT
        27
    CEBBCAT  
       2023-12-01 18:51:31 +08:00
    @gouguoyin #23 明白
    gouguoyin
        28
    gouguoyin  
    OP
       359 天前
    @RedisMasterNode v2.3.1 已加上 benchmark
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   878 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:46 · PVG 05:46 · LAX 13:46 · JFK 16:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.