Golang日期库go-carbon发布1.5.1版本:修复已知问题并新增土耳其语翻译文件

Golang日期库go-carbon发布1.5.1版本:修复已知问题并新增土耳其语翻译文件 Carbon 是一个简单、语义化且对开发者友好的 Go 语言日期时间处理包。

Carbon 已被收录于 awesome-go,如果您觉得它有帮助,请给我一个星标。

github.com/golang-module/carbon

更新日志

  • 修复了 EndOfCentury() 的 bug
  • 规范了代码注释格式
  • 规范了单元测试格式
  • 优化了错误信息
  • 单元测试覆盖率提升至 100%
  • 新增了由 emresenyuva 翻译的土耳其语翻译文件 lang/tr.json

更多关于Golang日期库go-carbon发布1.5.1版本:修复已知问题并新增土耳其语翻译文件的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

我知道,但 uniplaces/carbon 已经很长时间没有更新了,而且功能也不完善。

更多关于Golang日期库go-carbon发布1.5.1版本:修复已知问题并新增土耳其语翻译文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我理解,但我的观点是存在一个可能让用户感到困惑的名称冲突。

许多库都称为JWT,尽管它们名称相同,但都有不同的用户。

感谢分享!

你是否知道还有另一个名为 Carbon 的日期时间包?这可能会引起混淆……

uniplaces/carbon: Carbon for Golang, an extension for Time

go-carbon 1.5.1版本的发布确实是一次重要的更新,修复了已知问题并增加了土耳其语支持。以下是具体更新内容的代码示例:

修复EndOfCentury() bug

package main

import (
    "fmt"
    "github.com/golang-module/carbon"
)

func main() {
    // 修复前的EndOfCentury可能存在计算错误
    // 修复后确保正确计算世纪结束时间
    now := carbon.Now()
    endOfCentury := now.EndOfCentury()
    
    fmt.Printf("当前时间: %s\n", now.ToDateTimeString())
    fmt.Printf("本世纪结束时间: %s\n", endOfCentury.ToDateTimeString())
    // 输出示例:本世纪结束时间: 2099-12-31 23:59:59
}

新增土耳其语支持

package main

import (
    "fmt"
    "github.com/golang-module/carbon"
)

func main() {
    // 设置土耳其语本地化
    carbon.SetLocale("tr")
    
    now := carbon.Now()
    fmt.Printf("土耳其语月份: %s\n", now.ToMonthString())
    fmt.Printf("土耳其语星期: %s\n", now.ToWeekString())
    
    // 切换回英语
    carbon.SetLocale("en")
    fmt.Printf("英语月份: %s\n", now.ToMonthString())
}

优化后的错误处理

package main

import (
    "fmt"
    "github.com/golang-module/carbon"
)

func main() {
    // 优化后的错误信息更清晰
    invalidTime, err := carbon.CreateFromTimestamp(-1)
    if err != nil {
        fmt.Printf("错误信息: %v\n", err)
        // 输出更明确的错误提示,便于调试
    }
    
    // 有效的日期创建
    validTime := carbon.Parse("2023-12-31 23:59:59")
    if validTime.Error != nil {
        fmt.Printf("解析错误: %v\n", validTime.Error)
    } else {
        fmt.Printf("解析成功: %s\n", validTime.ToDateTimeString())
    }
}

100%测试覆盖率的示例

package main

import (
    "fmt"
    "github.com/golang-module/carbon"
    "time"
)

func main() {
    // 各种时间格式的解析测试
    formats := []string{
        "2006-01-02",
        "2006-01-02 15:04:05",
        time.RFC3339,
        "2006/01/02",
    }
    
    for _, format := range formats {
        testTime := carbon.Parse(format)
        if testTime.Error != nil {
            fmt.Printf("格式 %s 解析失败: %v\n", format, testTime.Error)
        } else {
            fmt.Printf("格式 %s 解析成功\n", format)
        }
    }
    
    // 边界值测试
    edgeCases := []string{
        "0001-01-01",  // 最小日期
        "9999-12-31",  // 最大日期
        "2023-02-29",  // 无效日期(非闰年)
    }
    
    for _, dateStr := range edgeCases {
        result := carbon.Parse(dateStr)
        fmt.Printf("%s 是否有效: %v\n", dateStr, result.IsValid())
    }
}

规范化的代码使用示例

package main

import (
    "fmt"
    "github.com/golang-module/carbon"
)

func main() {
    // 使用规范化的API
    now := carbon.Now()
    
    // 时间运算
    tomorrow := now.AddDay()
    lastWeek := now.SubWeek()
    
    // 时间比较
    fmt.Printf("现在是否在明天之前: %v\n", now.Lt(tomorrow))
    fmt.Printf("现在是否在上周之后: %v\n", now.Gt(lastWeek))
    
    // 时间格式化
    fmt.Printf("ISO8601格式: %s\n", now.ToIso8601String())
    fmt.Printf("RFC822格式: %s\n", now.ToRfc822String())
    fmt.Printf("自定义格式: %s\n", now.Format("Y年m月d日 H时i分s秒"))
    
    // 获取时间组件
    fmt.Printf("年份: %d\n", now.Year())
    fmt.Printf月份: %d\n", now.Month())
    fmt.Printf("本年第几天: %d\n", now.DayOfYear())
}

这些更新使go-carbon更加稳定和国际化,特别是土耳其语支持的加入扩展了库的全球使用范围。100%的测试覆盖率确保了代码质量,修复的EndOfCentury() bug避免了日期计算错误。

回到顶部