七叶笔记 » golang编程 » golang时间操作库推荐——carbon

golang时间操作库推荐——carbon

平常写代码时经常遇到要各种时间操作,golang里面时间操作有时有显得不那么智能,尤其是我们在Format时间格式的时候,需要用固定的Layout。

 now := time.Now()
 // 这几个数字还不能乱写,不然转过来的时间会很莫名其妙
strNow := now.Format("2006/01/02 03:04:05")  

这里给大家推荐一个贼好用的时间操作库,除了可以不用每次都用这种默认规则的代码,任意输入时间格式之外,carbon还支持以下多种功能:

  • 常用相对时间快速获取,如今天,昨天,后天等
  • 快速获取某天/月/年的结束和开始,如二月的结束时间 2021/02/28 23:59:59
  • 农历时间转换。
  • 大跨度时间计算,go默认库最大单位粒度是Hour, Carbon最大粒度可支持Century。
  • 时间判断,有效性检测/差值计算/范围判断
  • 灵活的字符串格式输出。
  • 星座解析。
  • 数据库/json格式的支持。

安装方式:

 go get -u github.com/golang-module/carbon  

下面给几个示例

 // 今天此刻
carbon.Now().ToDateTimeString() // 2020-08-05 13:14:15
// 今天日期
carbon.Now().ToDateString() // 2020-08-05
// 今天时间
carbon.Now().ToTimeString() // 13:14:15
// 明天此刻
carbon.Tomorrow().ToDateTimeString() // 2020-08-06 13:14:15
// 明天日期
carbon.Tomorrow().ToDateString() // 2020-08-06


carbon.Parse("0000-00-00 00:00:00").ToDateTimeString() // 空字符串
carbon.Parse("0000-00-00").ToDateTimeString() // 空字符串
carbon.Parse("2020-08-05 13:14:15").ToDateTimeString() // 2020-08-05 13:14:15
carbon.Parse("2020-08-05").ToDateTimeString() // 2020-08-05 00:00:00
carbon.Parse("20200805131415").ToDateTimeString() // 2020-08-05 13:14:15


// 本年开始时间
carbon.Parse("2020-08-05 13:14:15").StartOfYear().ToDateTimeString() // 2020-01-01 00:00:00
// 本年结束时间
carbon.Parse("2020-08-05 13:14:15").EndOfYear().ToDateTimeString() // 2020-12-31 23:59:59


// 三世纪后
carbon.Parse("2020-02-29 13:14:15").AddCenturies(3).ToDateTimeString() // 2320-02-29 13:14:15
// 三世纪后(月份不溢出)
carbon.Parse("2020-02-29 13:14:15").AddCenturiesNoOverflow(3).ToDateTimeString() // 2320-02-29 13:14:15

// 一世纪后
carbon.Parse("2020-02-29 13:14:15").AddCentury().ToDateTimeString() // 2120-02-29 13:14:15
// 一世纪后(月份不溢出)
// 三周前
carbon.Parse("2020-02-29 13:14:15").SubWeeks(3).ToDateTimeString() // 2020-02-08 13:14:15
// 一周前
carbon.Parse("2020-02-29 13:14:15").SubWeek().ToDateTimeString() // 2020-02-22 13:14:15


// 是否在两个时间之间(不包括这两个时间)
carbon.Parse("2020-08-05 13:14:15").Between(carbon.Parse("2020-08-05 13:14:15"), carbon.Parse("2020-08-06 13:14:15")) // false
carbon.Parse("2020-08-05 13:14:15").Between(carbon.Parse("2020-08-04 13:14:15"), carbon.Parse("2020-08-06 13:14:15")) // true


// 输出 RFC822 格式字符串
carbon.Parse("2020-08-05 13:14:15").ToRfc822String() // 05 Aug 20 13:14 CST
// 输出 RFC822Z 格式字符串
carbon.Parse("2020-08-05 13:14:15").ToRfc822zString() // 05 Aug 20 13:14 +0800
// 输出 RFC850 格式字符串
carbon.Parse("2020-08-05 13:14:15").ToRfc850String() // Wednesday, 05-Aug-20 13:14:15 CST
// 输出 RFC1036 格式字符串
carbon.Parse("2020-08-05 13:14:15").ToRfc1036String() // Wed, 05 Aug 20 13:14:15 +0800
// 输出 RFC1123 格式字符串
carbon.Parse("2020-08-05 13:14:15").ToRfc1123String() // Wed, 05 Aug 2020 13:14:15 CST
// 输出 RFC2822 格式字符串
carbon.Parse("2020-08-05 13:14:15").ToRfc2822String() // Wed, 05 Aug 2020 13:14:15 +0800
// 输出 RFC3339 格式字符串
carbon.Parse("2020-08-05 13:14:15").ToRfc3339String() // 2020-08-05T13:14:15+08:00
// 输出 RFC7231 格式字符串
carbon.Parse("2020-08-05 13:14:15").ToRfc7231String() // Wed, 05 Aug 2020 05:14:15 GMT


// 获取本年第几天
carbon.Parse("2020-08-05 13:14:15").DayOfYear() // 218
// 获取本年第几周
carbon.Parse("2019-12-31 13:14:15").WeekOfYear() // 1
carbon.Parse("2020-08-05 13:14:15").WeekOfYear() // 32
// 获取本周第几天(从1开始)
carbon.Parse("2020-08-05 13:14:15").DayOfWeek() // 3
carbon.Parse("2020-08-09 13:14:15").Week() // 7

// 获取生肖年
carbon.Parse("2020-08-05 13:14:15").AnimalYear() // 鼠
// 获取干支纪年
carbon.Parse("2020-08-05 13:14:15").ToChineseYearString() // 庚子
// 获取干支纪日
carbon.Parse("2020-08-05 13:14:15").ToChineseDayString() // 庚辰
// 是否是鼠年
carbon.Parse("2020-08-05 13:14:15").IsYearOfRat() // true


// 获取星座
carbon.Parse("2020-08-05 13:14:15").Constellation() // Leo
// 是否是白羊座
carbon.Parse("2020-08-05 13:14:15").IsAries() // false  

怎么样?看了这个是用方式之后是不是发现工作可以方便很多?欢迎在评论区讨论。

相关文章