go 进阶 三方库之 joda-time

一. joda-time 基础解释

  1. joda-time 是一个流行的 Java 日期和时间处理库,在 Golang 中有对应的实现 go-joda. 它提供了对日期、时间、时区、周期、持续时间、格式化和解析等多个时间操作的支持,设计得非常全面和庞大。它的优点如下:
  1. 支持多种日历系统,包括 ISO、Julian、Coptic 和 Ethiopic 等。
  2. 提供了丰富的日期和时间操作方法,并提供了更加灵活的时间格式化和解析方法,支持任意格式的时间字符串。
  3. 支持日期和时间的比较、加减运算、取整等常用操作,方便进行复杂的时间计算。
  4. 支持时区和夏令时的处理,可以自动识别夏令时变化,转换成 UTC 时间等。
  1. 由于 joda-time 设计得非常庞大,可能会过于复杂和繁琐,不太适合简单的时间操作
  2. 使用示例
package main

import (
    "fmt"
    "github.com/vjeantet/jodaTime"
)

func main() {
   // 获取当前时间
   now := jodaTime.Format("YYYY-MM-dd HH:mm:ss", jodaTime.Now())

   // 解析字符串为时间对象
   time, _ := jodaTime.Parse("YYYY-MM-dd HH:mm:ss", "2023-05-24 01:32:25")

   // 操作时间
   plus1day := jodaTime.PlusDays(time, 1)
   minus30mins := jodaTime.MinusMinutes(time, 30)

   // 输出结果
   fmt.Println("当前时间:", now)
   fmt.Println("解析后的时间:", jodaTime.Format("YYYY-MM-dd HH:mm:ss", time))
   fmt.Println("增加一天后的时间:", jodaTime.Format("YYYY-MM-dd HH:mm:ss", plus1day))
   fmt.Println("减少30分钟后的时间:", jodaTime.Format("YYYY-MM-dd HH:mm:ss", minus30mins))
}

二. joda-time常用API简介

// 获取当前时间对象
func Now() *time.Time

// 解析字符串为时间对象
func Parse(layout, value string) (*time.Time, error)

// 将时间对象格式化为字符串
func Format(layout string, time *time.Time) string

// 获取给定时间所在的年份
func GetYear(time *time.Time) int

// 获取给定时间所在的月份(1-12)
func GetMonth(time *time.Time) int

// 获取给定时间所在的月份天数
func GetMonthDays(time *time.Time) int

// 获取给定时间所在的星期几(1-7)
func GetWeekday(time *time.Time) int

// 获取给定时间所在月份的第一天
func FirstDayOfMonth(time *time.Time) *time.Time

// 获取给定时间所在月份的最后一天
func LastDayOfMonth(time *time.Time) *time.Time

// 获取给定时间所在周的第一天(周一)
func FirstDayOfWeek(time *time.Time) *time.Time

// 获取给定时间所在周的最后一天(周日)
func LastDayOfWeek(time *time.Time) *time.Time

// 获取给定时间所在年份的第一天
func FirstDayOfYear(time *time.Time) *time.Time

// 获取给定时间所在年份的最后一天
func LastDayOfYear(time *time.Time) *time.Time

// 获取给定时间加上指定天数的时间对象
func PlusDays(time *time.Time, days int) *time.Time

// 获取给定时间加上指定小时数的时间对象
func PlusHours(time *time.Time, hours int) *time.Time

// 获取给定时间加上指定分钟数的时间对象
func PlusMinutes(time *time.Time, minutes int) *time.Time

// 获取给定时间加上指定秒数的时间对象
func PlusSeconds(time *time.Time, seconds int) *time.Time

// 获取给定时间减去指定天数的时间对象
func MinusDays(time *time.Time, days int) *time.Time

// 获取给定时间减去指定小时数的时间对象
func MinusHours(time *time.Time, hours int) *time.Time

// 获取给定时间减去指定分钟数的时间对象
func MinusMinutes(time *time.Time, minutes int) *time.Time

// 获取给定时间减去指定秒数的时间对象
func MinusSeconds(time *time.Time, seconds int) *time.Time
// 判断给定时间是否在另一个时间之后
func IsAfter(time1, time2 *time.Time) bool

// 判断给定时间是否在另一个时间之前
func IsBefore(time1, time2 *time.Time) bool

// 判断两个时间是否相等
func Equals(time1, time2 *time.Time) bool

// 获取两个时间之间的时间差
func DurationBetween(start, end *time.Time) int64

// 获取两个日期之间的天数差
func DaysBetween(start, end *time.Time) int

// 获取两个日期之间的周数差
func WeeksBetween(start, end *time.Time) int

// 获取两个日期之间的月数差
func MonthsBetween(start, end *time.Time) int

// 获取两个日期之间的年数差
func YearsBetween(start, end *time.Time) int

// 时间对象的加减运算,支持多种时间单位
func Plus(time *time.Time, durationType DurationType, duration int) *time.Time

// 时间对象的减运算,支持多种时间单位
func Minus(time *time.Time, durationType DurationType, duration int) *time.Time

// 获取指定 TimeZone 对象
func GetTimeZone(id string) *time.Location

// 将时间对象转换为指定 TimeZone 的时间
func ConvertToTimeZone(time *time.Time, timeZone *time.Location) *time.Time

// 将时间对象转换为 UTC 时间
func ConvertToUTC(time *time.Time) *time.Time

// 将时间对象转换为本地时间
func ConvertToLocal(time *time.Time) *time.Time

// 获取指定日期的午夜时间点 (00:00:00)
func GetMidnight(time *time.Time) *time.Time
// 判断给定时间是否是闰年
func IsLeapYear(year int) bool

// 获取给定月份中第几个星期的开始日期(周一为一周的起始日)
func GetFirstDayOfWeekInMonth(time *time.Time, weekNum int) *time.Time

// 获取给定月份中第几个星期的结束日期(周日为一周的结束日)
func GetLastDayOfWeekInMonth(time *time.Time, weekNum int) *time.Time

// 判断给定时间是否是工作日
func IsWeekday(time *time.Time) bool

// 判断给定时间是否是周末
func IsWeekend(time *time.Time) bool

// 获取指定时间点的小时值,支持12和24小时制
func GetHours(time *time.Time, is24hr bool) int

// 获取指定时间点的分钟值
func GetMinutes(time *time.Time) int

// 获取指定时间点的秒值
func GetSeconds(time *time.Time) int
// 将时间从一个时区转换为另一个时区并格式化为指定格式的字符串
func FormatWithTimeZone(time *time.Time, pattern string, timeZone *time.Location) string

// 将字符串解析为时间对象并转换为指定时区
func ParseWithTimeZone(dateString, pattern string, timeZone *time.Location) (*time.Time, error)

三. 其它三方时间库

  1. Golang 标准库 time 可以执行基本的时间操作,这个库非常简单易用,也适用于大多数的时间场景
  2. go-carbon 是一个开源的 Golang 时间处理库,提供了更为高效和精确的时间计算能力,但是的功能相对简单,不支持复杂的时间操作,例如月份的差异计算等
  3. dateparse 是 Golang 中一个轻量级的日期时间格式化和解析库,相比于标准库 time 和 joda-time,它更加灵活和易用,但是 功能较为单一,不支持复杂的时间计算和操作,适用于简单的时间格式化和解析需求
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值