Go (Golang) 中的日期处理:time、carbon 和 now 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Go (Golang) 中的日期处理:库概览



在任何编程语言中,日期和时间的处理都是一项关键任务。在 Go (Golang) 中,标准库提供了强大的 time 包,但有时为了方便,开发者会使用第三方库。本文将介绍标准包的主要功能,并探讨两个流行的库:carbon 和 now。



1. 标准 time 包



time 包是 Go 中处理日期的基础。它包含 Time、Duration 类型,以及用于解析、格式化、处理定时器和时区的函数。



创建和格式化日期



package main

import ( "fmt" "time")

func main() { // 当前时间 now := time.Now() fmt.Println("当前时间:", now)

// 创建特定日期 date := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("特定日期:", date)

// 格式化(必须使用 "2006-01-02 15:04:05" 作为参考格式) fmt.Println("格式化:", date.Format("02.01.2006 15:04:05"))}


将字符串解析为日期



func main() {    // 指定格式进行解析    str := "2025-03-15 14:30:00"    parsed, err := time.Parse("2006-01-02 15:04:05", str)    if err != nil {        panic(err)    }    fmt.Println("解析结果:", parsed)}


处理时区



func main() {    loc, _ := time.LoadLocation("Europe/Moscow")    moscowTime := time.Now().In(loc)    fmt.Println("莫斯科时间:", moscowTime)}


日期之间的差异



func main() {    start := time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC)    end := time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC)    duration := end.Sub(start)    fmt.Printf("差异: %v (小时: %v)", duration, duration.Hours())}


2. carbon 库



carbon 库 (github.com/golang-module/carbon) 是流行的 PHP Carbon 库在 Go 中的移植版本。它提供了便捷的流畅接口用于日期处理。



安装



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


使用示例



package main

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

func main() { // 当前日期 now := carbon.Now() fmt.Println("当前时间:", now.ToString())

// 创建日期 date := carbon.Parse("2025-03-15 14:30:00") fmt.Println("解析结果:", date.ToDateString())

// 添加天数 future := carbon.Now().AddDays(10) fmt.Println("10天后:", future.ToDateString())

// 天数差异 diff := carbon.Now().DiffInDays(carbon.Parse("2025-12-31")) fmt.Printf("距离新年还有: %d 天", diff)

// 格式化 fmt.Println("自定义格式:", carbon.Now().Format("d/m/Y H:i:s"))}


便捷方法



  • StartOfDay() / EndOfDay() — 一天的开始/结束
  • IsWeekend() / IsWeekday() — 检查星期几
  • Age() — 从出生日期算起的年龄
  • DiffForHumans() — 人类可读的差异(例如 "3 天前")


3. now 库



now 库 (github.com/jinzhu/now) 由 GORM 的作者创建,是一个轻量级的工具,用于获取时间段的开始和结束。



安装



go get github.com/jinzhu/now


使用示例



package main

import ( "fmt" "time" "github.com/jinzhu/now")

func main() { // 一天的开始 beginningOfDay := now.BeginningOfDay() fmt.Println("

推荐