time

package
v0.0.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 22, 2025 License: MIT Imports: 1 Imported by: 0

README

time

简介

time 包是一个基于 carbon 库的时间处理工具包,提供了丰富的时间操作功能和灵活的配置选项。该包旨在简化 Go 语言中的时间处理操作,提供了一系列直观且易用的 API。

主要特性
  • 支持自定义日期时间格式
  • 灵活的时区配置
  • 可配置的周起始日(周一或周日)
  • 多语言环境支持(中文、英文、日文等)
  • 丰富的时间计算功能(昨天、明天、上周、下月等)
  • 编译时可配置的默认参数
设计理念

time 包的设计遵循以下原则:

  1. 简单易用:提供直观的 API,减少开发者的学习成本
  2. 灵活配置:支持通过编译参数自定义包的行为
  3. 国际化支持:内置多语言支持,满足不同地区的需求
  4. 可扩展性:基于成熟的 carbon 库,保证功能的可靠性和可扩展性

安装

前置条件
  • Go 版本要求:>= 1.18
  • 依赖要求:
    • github.com/dromara/carbon/v2
安装命令
go get -u github.com/fsyyft/fsyyft-go/time

快速开始

基础用法
package main

import (
    "fmt"
    "github.com/fsyyft/fsyyft-go/time"
)

func main() {
    // 获取当前时间
    now := time.Now()
    fmt.Println(now.ToDateTimeString())

    // 获取昨天的时间
    yesterday := time.Yesterday()
    fmt.Println(yesterday.ToDateTimeString())

    // 获取明天的时间
    tomorrow := time.Tomorrow()
    fmt.Println(tomorrow.ToDateTimeString())
}
配置选项

可以通过编译时参数配置包的默认行为:

go build -ldflags "
    -X 'github.com/fsyyft/fsyyft-go/time.defaultDateTimeLayout=2006-01-02 15:04:05'
    -X 'github.com/fsyyft/fsyyft-go/time.defaultTimezone=UTC'
    -X 'github.com/fsyyft/fsyyft-go/time.defaultWeekStartAt=Sunday'
    -X 'github.com/fsyyft/fsyyft-go/time.defaultLocale=en'
"

详细指南

核心概念
  1. 时间格式化:使用 Go 的标准时间格式字符串
  2. 时区处理:支持多种时区配置
  3. 语言环境:支持多语言显示
  4. 时间计算:提供丰富的时间计算函数
常见用例
1. 基本时间获取
// 获取当前时间
now := time.Now()

// 获取昨天和明天
yesterday := time.Yesterday()
tomorrow := time.Tomorrow()

// 获取前天和后天
dayBefore := time.DayBeforeYesterday()
dayAfter := time.DayAfterTomorrow()
2. 周期性时间计算
// 获取上周和下周
lastWeek := time.LastWeek()
nextWeek := time.NextWeek()

// 获取上月和下月
lastMonth := time.LastMonth()
nextMonth := time.NextMonth()

// 获取去年和明年
lastYear := time.LastYear()
nextYear := time.NextYear()
最佳实践
  • 使用编译时配置来设置全局默认值
  • 在应用初始化时确认时区设置
  • 使用适合目标用户的语言环境
  • 注意处理跨时区的时间计算

API 文档

主要类型

time 包主要使用 carbon.Carbon 类型作为时间表示:

type Carbon struct {
    // 内部字段由 carbon 库管理
}
关键函数
Now()

返回当前时间的 Carbon 实例。

func Now() carbon.Carbon

示例:

now := time.Now()
fmt.Println(now.ToDateTimeString())
Yesterday()

返回昨天同一时间的 Carbon 实例。

func Yesterday() carbon.Carbon

示例:

yesterday := time.Yesterday()
fmt.Println(yesterday.ToDateTimeString())
错误处理

time 包的函数返回 carbon.Carbon 实例,不会返回错误。如果需要进行错误处理,请参考 carbon 库的文档。

性能指标

操作 性能指标 说明
基本时间操作 O(1) 常量时间复杂度
时间计算 O(1) 常量时间复杂度
格式化输出 O(n) n 为输出字符串长度

测试覆盖率

覆盖率
time 待补充

调试指南

常见问题排查
时区不正确

问题:时间显示的时区与预期不符 解决方案:检查 defaultTimezone 配置,确保使用正确的时区标识符

格式化输出异常

问题:时间格式化输出不符合预期 解决方案:检查 defaultDateTimeLayout 配置,确保使用正确的格式字符串

相关文档

贡献指南

我们欢迎任何形式的贡献,包括但不限于:

  • 报告问题
  • 提交功能建议
  • 提交代码改进
  • 完善文档

请参考我们的贡献指南了解详细信息。

许可证

本项目采用 MIT 许可证。查看 LICENSE 文件了解更多信息。

Documentation

Overview

Package time 提供了基于 carbon 库的时间处理工具包,支持丰富的时间操作和格式化功能。

包配置: 本包提供了多个可在编译时配置的变量,可以通过 go build 的 -ldflags 参数进行修改。 完整的编译示例:

go build -ldflags "

-X 'github.com/fsyyft/fsyyft-go/time.defaultDateTimeLayout=2006-01-02 15:04:05'
-X 'github.com/fsyyft/fsyyft-go/time.defaultTimezone=UTC'
-X 'github.com/fsyyft/fsyyft-go/time.defaultWeekStartAt=Sunday'
-X 'github.com/fsyyft/fsyyft-go/time.defaultLocale=en'

主要特性:

  • 基于 Carbon 库,提供强大的时间处理能力
  • 支持多种时间格式的解析和转换
  • 提供丰富的时间计算和比较功能
  • 支持时区处理
  • 支持自然语言时间描述
  • 链式操作支持

基本使用:

1. 创建时间:

// 获取当前时间
now := time.Now()

// 从字符串创建时间
t1, err := time.Parse("2006-01-02 15:04:05", "2024-03-18 10:30:00")
if err != nil {
    panic(err)
}

// 从时间戳创建
t2 := time.FromTimestamp(1710728400)

2. 时间格式化:

now := time.Now()

// 标准格式
fmt.Println(now.Format("Y-m-d H:i:s"))  // 2024-03-18 10:30:00
fmt.Println(now.ToDateTimeString())      // 2024-03-18 10:30:00
fmt.Println(now.ToDateString())          // 2024-03-18
fmt.Println(now.ToTimeString())          // 10:30:00

3. 时间计算:

now := time.Now()

// 增加时间
future := now.AddDays(7)
future = now.AddHours(24)
future = now.AddMinutes(30)

// 减少时间
past := now.SubDays(7)
past = now.SubHours(24)
past = now.SubMinutes(30)

4. 时间比较:

t1 := time.Now()
t2 := time.Now().AddDays(1)

// 比较
if t1.Lt(t2) {
    fmt.Println("t1 早于 t2")
}

if t2.Gt(t1) {
    fmt.Println("t2 晚于 t1")
}

if t1.Eq(t1) {
    fmt.Println("时间相等")
}

5. 时间范围判断:

now := time.Now()

// 判断是否在某个时间范围内
start := now.SubDays(7)
end := now.AddDays(7)

if now.Between(start, end) {
    fmt.Println("在时间范围内")
}

6. 时区处理:

// 设置时区
t := time.Now().SetTimezone("Asia/Shanghai")

// 转换时区
utc := t.ToUTC()
local := utc.ToLocal()

7. 自然语言:

now := time.Now()

// 获取自然语言描述
fmt.Println(now.DiffForHumans())  // 1 分钟前

// 获取日期描述
fmt.Println(now.ToFormattedDateString())  // 2024年03月18日

8. 日期判断:

now := time.Now()

// 判断是否是特定日期
if now.IsMonday() {
    fmt.Println("今天是星期一")
}

if now.IsWeekend() {
    fmt.Println("今天是周末")
}

if now.IsLeapYear() {
    fmt.Println("今年是闰年")
}

注意事项:

1. 时区处理:

  • 注意时区转换可能带来的时间差异
  • 建议统一使用 UTC 时间进行存储
  • 仅在展示时转换为本地时间

2. 格式化:

  • 使用预定义的格式化字符串避免错误
  • 注意不同地区的日期格式差异
  • 处理时注意年份的表示范围

3. 性能优化:

  • 避免频繁的时区转换
  • 合理使用时间缓存
  • 注意时间计算的精度要求

更多示例和最佳实践请参考 example/time 目录。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DayAfterTomorrow

func DayAfterTomorrow() *carbon.Carbon

DayAfterTomorrow 返回后天同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示后天同一时间的 Carbon 实例

示例:

dayAfterTomorrow := time.DayAfterTomorrow()
fmt.Println(dayAfterTomorrow.ToDateTimeString()) // 输出后天的日期和当前时间

func DayBeforeYesterday

func DayBeforeYesterday() *carbon.Carbon

DayBeforeYesterday 返回前天同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示前天同一时间的 Carbon 实例

示例:

dayBeforeYesterday := time.DayBeforeYesterday()
fmt.Println(dayBeforeYesterday.ToDateTimeString()) // 输出前天的日期和当前时间

func LastMonth

func LastMonth() *carbon.Carbon

LastMonth 返回上个月同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示上个月同一时间的 Carbon 实例

示例:

lastMonth := time.LastMonth()
fmt.Println(lastMonth.ToDateTimeString()) // 输出上个月的日期和当前时间

func LastWeek

func LastWeek() *carbon.Carbon

LastWeek 返回上周同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示上周同一时间的 Carbon 实例

示例:

lastWeek := time.LastWeek()
fmt.Println(lastWeek.ToDateTimeString()) // 输出上周的日期和当前时间

func LastYear

func LastYear() *carbon.Carbon

LastYear 返回去年同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示去年同一时间的 Carbon 实例

示例:

lastYear := time.LastYear()
fmt.Println(lastYear.ToDateTimeString()) // 输出去年的日期和当前时间

func NextMonth

func NextMonth() *carbon.Carbon

NextMonth 返回下个月同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示下个月同一时间的 Carbon 实例

示例:

nextMonth := time.NextMonth()
fmt.Println(nextMonth.ToDateTimeString()) // 输出下个月的日期和当前时间

func NextWeek

func NextWeek() *carbon.Carbon

NextWeek 返回下周同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示下周同一时间的 Carbon 实例

示例:

nextWeek := time.NextWeek()
fmt.Println(nextWeek.ToDateTimeString()) // 输出下周的日期和当前时间

func NextYear

func NextYear() *carbon.Carbon

NextYear 返回明年同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示明年同一时间的 Carbon 实例

示例:

nextYear := time.NextYear()
fmt.Println(nextYear.ToDateTimeString()) // 输出明年的日期和当前时间

func Now

func Now() *carbon.Carbon

Now 返回当前时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示当前时间的 Carbon 实例

示例:

now := time.Now()
fmt.Println(now.ToDateTimeString()) // 输出类似:2025-01-02 15:04:05

func Tomorrow

func Tomorrow() *carbon.Carbon

Tomorrow 返回明天同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示明天同一时间的 Carbon 实例

示例:

tomorrow := time.Tomorrow()
fmt.Println(tomorrow.ToDateTimeString()) // 输出明天的日期和当前时间

func Yesterday

func Yesterday() *carbon.Carbon

Yesterday 返回昨天同一时间的 Carbon 实例。

返回值:

  • *carbon.Carbon: 表示昨天同一时间的 Carbon 实例

示例:

yesterday := time.Yesterday()
fmt.Println(yesterday.ToDateTimeString()) // 输出昨天的日期和当前时间

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL