一架梯子,一头程序猿,仰望星空!

Golang Carbon日期时间处理库

Carbon 包是一个日期时间处理利器,在 Golang 中可以简单的处理各类日期时间换算。

1: 开始使用 Carbon

1.1 简介

一个简单、语义化且对开发者友好的 Golang 日期时间处理包

使用 Carbon 进行日期时间处理的好处:

  • 对开发者友好:Carbon 提供了一个流畅且富有表现力的接口来处理日期时间,直观易懂。
  • 国际化支持:支持国际化,允许你本地化日期表示。
  • 不可变性:Carbon 实例是不可变的,意味着可以安全地传递而不会发生意外修改。
  • 时区处理:Carbon 简化了跨不同时区管理日期时间的复杂性。
  • 广泛的 API:提供了一整套用于创建、解析和格式化日期和时间的函数。

1.2 安装指南

针对 Go 版本 >= 1.16 的安装

要为 Go 版本 1.16 或以上安装 Carbon 包,请使用以下命令:

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

然后,在你的 Go 文件中导入该包:

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

针对 Go 版本 < 1.16 的安装

对于旧版本的 Go,你仍然可以使用以下命令安装 Carbon:

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

并以类似方式导入它:

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

请注意,v1 不再积极更新,但会维护以修复 bug。

1.3 设置您的首个 Carbon 项目

Carbon 的基本配置: 安装完 Carbon 后,你可以通过简单地创建一个新的 Carbon 实例来开始使用它。 你可以通过设置默认的全局布局、时区和语言环境来自定义 Carbon,以适应你项目的需求。

设置全局默认布局、时区和语言环境:

carbon.SetDefault(carbon.Default{
  Layout: carbon.RFC3339Layout,
  Timezone: carbon.PRC,
  Locale: "en",
})

如果没有显式设置,Carbon 有这些默认设置 —— Layout: "2006-01-02 15:04:05"Timezone: LocalLocale: "en"

2: 基本的 Carbon 操作

2.1 处理当前时间

获取当前日期和时间

在许多应用程序中,检索当前日期和时间是一个基本操作。通过 Carbon,您可以通过调用 carbon.Now() 方法获取当前的日期时间实例。让我们看看如何获取当前日期时间:

// 获取当前日期和时间作为 Carbon 实例。
now := carbon.Now()

fmt.Println("当前日期时间:", now)

显示今天、昨天和明天

Carbon 提供了一种优雅的方式来处理相对于当前日期的日期。要获取今天、昨天和明天的日期时间表示,分别可以使用 carbon.Now()carbon.Yesterday()carbon.Tomorrow() 方法:

// 今天的日期时间
today := carbon.Now()
fmt.Println("今天:", today.ToDateTimeString())

// 昨天的日期时间
yesterday := carbon.Yesterday()
fmt.Println("昨天:", yesterday.ToDateTimeString())

// 明天的日期时间
tomorrow := carbon.Tomorrow()
fmt.Println("明天:", tomorrow.ToDateTimeString())

这些方法提供了一种简洁的方式来与这些常用的日期引用进行交互,而无需手动计算。

格式化和表示当前时间

Carbon 提供了不同的方式来格式化和显示日期时间。无论您需要标准格式(如 ISO8601)、自定义格式或本地化版本,Carbon 都有适合这些需求的方法。

以下是您可以以各种方式格式化当前日期时间的示例:

// 标准日期时间表示
fmt.Println("RFC3339:", now.ToRFC3339String())
fmt.Println("ISO8601:", now.ToIso8601String())

// 自定义日期时间格式
fmt.Println("自定义:", now.Format("Monday, 02-Jan-06 15:04:05 MST"))

// 使用预定义的布局
fmt.Println("ANSIC 格式:", now.ToAnsicString())
fmt.Println("UnixDate 格式:", now.ToUnixDateString())
fmt.Println("RubyDate 格式:", now.ToRubyDateString())
fmt.Println("Kitchen 格式:", now.ToKitchenString())

// 对于自定义模式,请使用 Format 方法
fmt.Println("自定义模式:", now.Format("2006-01-02 3:04 PM"))

从时间戳创建实例

在 Go 中,处理时间戳很频繁,Carbon 提供了直观的方法来处理它们。时间戳是标识特定事件发生时间的一系列字符或编码信息,通常提供日期和时间,并且有时准确到秒的小部分。

要从 Unix 时间戳创建一个 Carbon 实例,Unix 时间戳表示自 Unix 纪元(1970 年 1 月 1 日协调世界时午夜)以来经过的秒数,你可以使用不同的精度级别:

// 使用秒精度从给定的时间戳创建 Carbon 实例
c1 := carbon.CreateFromTimestamp(1596604455)
fmt.Println(c1.ToString()) // 输出: "202-08-05 13:14:15 +080 CST"

// 对于更高精度(毫秒),使用 `CreateFromTimestampMilli`
c2 := carbon.CreateFromTimestampMilli(1596604455999)
fmt.Println(c2.ToString()) // 输出: "202-08-05 13:14:15.999 +080 CST"

// 对于微秒,使用 `CreateFromTimestampMicro`
c3 := carbon.CreateFromTimestampMicro(1596604455999999)
fmt.Println(c3.ToString()) // 输出: "202-08-05 13:14:15.999999 +080 CST"

// 对于纳秒,使用 `CreateFromTimestampNano`
c4 := carbon.CreateFromTimestampNano(1596604455999999999)
fmt.Println(c4.ToString()) // 输出: "202-08-05 13:14:15.999999999 +080 CST"

从日期和时间组件创建实例

如果你有日期的各个组成部分,例如年、月和日,或时间的组成部分,比如小时、分钟和秒,Carbon 也可以处理这些。

// 仅使用给定日期创建 Carbon 实例
date := carbon.CreateFromDate(2022, 12, 25)
fmt.Println(date.ToDateString()) // 输出: "2022-12-25"

// 仅使用给定时间创建 Carbon 实例
time := carbon.CreateFromTime(23, 59, 59)
fmt.Println(time.ToTimeString()) // 输出: "23:59:59"

// 从日期和时间创建 Carbon 实例
dateTime := carbon.CreateFromDateTime(2022, 12, 25, 23, 59, 59)
fmt.Println(dateTime.ToDateTimeString()) // 输出: "2022-12-25 23:59:59"

2.3 解析时间字符串

将日期时间表示为字符串是常见的情况。Carbon 使得将字符串解析为 Carbon 实例非常方便。

使用 carbon.Parse 处理标准时间格式:

// 解析带有日期和时间的字符串
c := carbon.Parse("202-08-05 13:14:15", carbon.PRC)
if c.Error != nil {
    fmt.Printf("错误: %v", c.Error)
} else {
    fmt.Println(c.ToDateTimeString()) // 输出: "202-08-05 13:14:15"
}

// 解析 RFC3339 格式的字符串
rfc3339 := carbon.Parse("202-08-05T13:14:15+08:00")
fmt.Println(rfc3339.ToString()) // 输出: "202-08-05 13:14:15 +080 CST"

使用 ParseByFormatParseByLayout 自定义格式:

你也可以解析特定格式的字符串,这些格式无法直接被 carbon.Parse 处理。

// 按照格式将时间字符串解析成 Carbon 实例
byFormat := carbon.ParseByFormat("202|08|05 13|14|15", "2006|01|02 15|04|05")
fmt.Println(byFormat.ToDateTimeString()) // 输出: "202-08-05 13:14:15"

// 按照布局将时间字符串解析成 Carbon 实例
byLayout := carbon.ParseByLayout("202|08|05", "2006|01|02")
fmt.Println(byLayout.ToDateString()) // 输出: "202-08-05"

处理错误

始终检查 Error 字段以确保解析成功:

invalidDate := carbon.Parse("This is not a date", carbon.PRC)
if invalidDate.IsInvalid() {
    fmt.Println("解析日期出错:", invalidDate.Error)
}

记住,进行健壮的错误检查是处理日期和时间的关键部分,以防止意外结果或系统崩溃。


章节目录