简介
jinzhu/now 是一个专注于简化 Go 语言时间操作的轻量级库。它扩展了标准库 time
的功能,提供了一系列便捷方法,用于计算时间段的开始/结束时刻、解析灵活的时间字符串,并支持自定义配置(如周起始日、时区等)。适用于日志统计、报表生成等需要复杂时间计算的场景。
核心功能
时间计算
获取时间段的起始/结束点:支持从分钟到年度的各粒度计算,如:
1
2now.BeginningOfDay() // 当天 00:00:00
now.EndOfMonth() // 当月最后一天的 23:59:59.999999999动态调整周起始日:默认以周日为一周开始,可配置为周一:
1
2now.WeekStartDay = time.Monday
now.BeginningOfWeek() // 返回本周一的 00:00:00
时间解析
智能补全日期:支持不完整字符串的解析,自动填充缺失部分为当前时间:
1
2
3now.Parse("2017") // 2017-01-01 00:00:00
now.Parse("10-13") // 当前年份的 10 月 13 日
now.Parse("14") // 当天 14:00:00
• 严格错误处理:
Parse
返回错误,MustParse
在解析失败时触发 panic。灵活配置
自定义时区与格式:支持指定时区和扩展时间格式:
1
2
3
4
5
6loc, _ := time.LoadLocation("Asia/Shanghai")
config := &now.Config{
TimeLocation: loc,
TimeFormats: []string{"2006/01/02"},
}
t := config.Parse("2023/10/01")
基于特定时间计算
可基于任意时间点(而非当前时间)进行计算:
1
2t := time.Date(2023, 2, 18, 17, 0, 0, 0, time.UTC)
now.With(t).EndOfQuarter() // 2023-03-31 23:59:59.999999999
使用示例
1 | package main |
扩展性
添加自定义时间格式:通过扩展
TimeFormats
支持更多格式:1
2now.TimeFormats = append(now.TimeFormats, "2006年01月02日")
t := now.MustParse("2023年10月01日")
注意事项
- 精度处理:
EndOf
系列方法返回纳秒级最大值(如23:59:59.999999999
),确保涵盖时间段的最后一刻。 - 错误处理:使用
Parse
时需检查错误,避免无效格式导致程序中断。
贡献与社区
- 作者:Jinzhu Zhang(联系邮箱: wosmvp@gmail.com )
- 开源贡献:欢迎提交 PR 添加新功能或修复问题。
总结
Jinzhu/now 凭借其简洁的 API 和灵活的配置,成为 Go 开发者处理复杂时间操作的利器。无论是统计时段的界定,还是动态时间解析,该库都能显著提升开发效率。