golang时间戳转换与比较工具插件库ts的使用

Golang时间戳转换与比较工具插件库ts的使用

简介

ts是一个用于时间戳转换和比较的Golang工具库,提供了便捷的时间戳操作功能。

安装方法

Shell安装(支持Linux & MacOS)

# 二进制文件将安装在$(go env GOPATH)/bin/ts
$ curl -sfL https://raw.githubusercontent.com/liujianping/ts/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

# 在alpine linux中(默认不包含curl)
$ wget -O - -q https://raw.githubusercontent.com/liujianping/ts/master/install.sh | sh -s

Brew安装(仅MacOS)

$ brew tap liujianping/tap && brew install ts

源码安装

$ git clone git@github.com:liujianping/ts.git
$ cd ts
$ go install -mod vendor

快速开始

基本使用示例

# 获取当前时间戳
$ ts

# 当前时间加1天
$ ts --add 1d

# 当前时间减1天
$ ts --sub 1d

# 转换时间字符串为时间戳
$ ts "2019/06/24 23:30:10"

# 使用管道转换
$ echo "2019/06/24 23:30:10" | ts

# 格式化时间
$ ts -f "2019/06/25 23:30:10"

# 比较时间是否在指定时间之前
$ ts -b "2019/06/25 23:30:10" ; echo $?

# 比较时间是否在指定时间之后
$ ts -a "2019/06/25 23:30:10" ; echo $?

# 指定时区格式化
$ ts -f "2019/06/25 23:30:10" -z "Asia/Shanghai"

支持的格式

$ ts -F

支持的系统格式包括:

  • ANSIC = “Mon Jan _2 15:04:05 2006”
  • UnixDate = “Mon Jan _2 15:04:05 MST 2006”
  • RubyDate = “Mon Jan 02 15:04:05 -0700 2006”
  • RFC822 = “02 Jan 06 15:04 MST”
  • RFC822Z = “02 Jan 06 15:04 -0700” (RFC822 with numeric zone)
  • RFC850 = “Monday, 02-Jan-06 15:04:05 MST”
  • RFC1123 = “Mon, 02 Jan 2006 15:04:05 MST”
  • RFC1123Z = “Mon, 02 Jan 2006 15:04:05 -0700” (RFC1123 with numeric zone)
  • RFC3339 = “2006-01-02T15:04:05Z07:00”
  • RFC3339Nano = “2006-01-02T15:04:05.999999999Z07:00”
  • Kitchen = “3:04PM”
  • Stamp = “Jan _2 15:04:05”
  • StampMilli = “Jan _2 15:04:05.000”
  • StampMicro = “Jan _2 15:04:05.000000”
  • StampNano = “Jan _2 15:04:05.000000000”
  • TimestampSec = “time.Unix()”
  • TimestampMilli = “time.UnixNano()/1000000”
  • TimestampMicro = “time.UnixNano()/1000”
  • TimestampNano = “time.UnixNano()”

Golang代码示例

package main

import (
	"fmt"
	"github.com/liujianping/ts"
)

func main() {
	// 获取当前时间戳
	now := ts.Now()
	fmt.Println("当前时间戳:", now)

	// 时间戳转换为字符串
	str := ts.Format(now, "2006-01-02 15:04:05")
	fmt.Println("格式化时间:", str)

	// 字符串转换为时间戳
	t, err := ts.Parse("2019/06/24 23:30:10", "2006/01/02 15:04:05")
	if err != nil {
		fmt.Println("解析错误:", err)
	} else {
		fmt.Println("解析得到的时间戳:", t)
	}

	// 时间比较
	compareTime := ts.MustParse("2019/06/25 23:30:10", "2006/01/02 15:04:05")
	if ts.Before(now, compareTime) {
		fmt.Println("当前时间在比较时间之前")
	} else {
		fmt.Println("当前时间在比较时间之后")
	}

	// 时间加减
	later := ts.Add(now, 24*time.Hour) // 加1天
	fmt.Println("加1天后的时间:", ts.Format(later, "2006-01-02 15:04:05"))
}

命令行参数说明

Flags:
      --add duration      增加时间间隔
  -a, --after string      比较是否在指定时间之后
  -b, --before string     比较是否在指定时间之前
  -f, --format string     时间格式
  -h, --help              显示帮助信息
      --sub duration      减少时间间隔
  -z, --timezone string   时区

这个工具库提供了丰富的时间操作功能,可以方便地在Golang项目中进行时间戳的转换和比较操作。


更多关于golang时间戳转换与比较工具插件库ts的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang时间戳转换与比较工具插件库ts的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang 时间戳转换与比较工具库 ts 使用指南

在Go语言中处理时间戳转换和比较是一个常见需求,下面我将介绍一个实用的时间戳处理工具库 ts 的使用方法,并提供完整的示例代码。

安装 ts 库

go get github.com/thinkeridea/go-extend/exdatetime/ts

基本功能与使用示例

1. 时间戳转时间

package main

import (
	"fmt"
	"time"
	
	"github.com/thinkeridea/go-extend/exdatetime/ts"
)

func main() {
	// 当前时间戳
	now := time.Now().Unix()
	
	// 时间戳转时间
	t := ts.Unix(now).Time()
	fmt.Println("时间戳转时间:", t)
	
	// 带纳秒的时间戳转时间
	nowNano := time.Now().UnixNano()
	tNano := ts.UnixNano(nowNano).Time()
	fmt.Println("纳秒时间戳转时间:", tNano)
}

2. 时间转时间戳

func timeToTimestamp() {
	// 当前时间
	now := time.Now()
	
	// 时间转秒级时间戳
	unix := ts.Time(now).Unix()
	fmt.Println("时间转秒级时间戳:", unix)
	
	// 时间转纳秒时间戳
	unixNano := ts.Time(now).UnixNano()
	fmt.Println("时间转纳秒时间戳:", unixNano)
}

3. 时间戳格式化

func timestampFormat() {
	// 当前时间戳
	now := time.Now().Unix()
	
	// 格式化时间戳
	formatted := ts.Unix(now).Format("2006-01-02 15:04:05")
	fmt.Println("格式化时间戳:", formatted)
	
	// 使用预定义格式
	formattedRFC3339 := ts.Unix(now).Format(time.RFC3339)
	fmt.Println("RFC3339格式:", formattedRFC3339)
}

4. 时间戳比较

func timestampCompare() {
	// 获取两个时间戳
	ts1 := time.Now().Unix()
	time.Sleep(1 * time.Second)
	ts2 := time.Now().Unix()
	
	// 比较时间戳
	fmt.Println("ts1 == ts2:", ts.Unix(ts1).Equal(ts.Unix(ts2)))
	fmt.Println("ts1 < ts2:", ts.Unix(ts1).Before(ts.Unix(ts2)))
	fmt.Println("ts1 > ts2:", ts.Unix(ts1).After(ts.Unix(ts2)))
	
	// 计算时间差
	duration := ts.Unix(ts2).Sub(ts.Unix(ts1))
	fmt.Println("时间差:", duration)
}

5. 时间戳加减

func timestampAdd() {
	// 当前时间戳
	now := time.Now().Unix()
	
	// 增加1小时
	after1Hour := ts.Unix(now).Add(1 * time.Hour).Unix()
	fmt.Println("1小时后:", after1Hour)
	
	// 减少30分钟
	before30Min := ts.Unix(now).Add(-30 * time.Minute).Unix()
	fmt.Println("30分钟前:", before30Min)
}

高级用法

1. 时区处理

func timezoneHandling() {
	// 创建特定时区
	loc, _ := time.LoadLocation("Asia/Shanghai")
	
	// 带时区的时间戳转换
	now := time.Now().Unix()
	t := ts.Unix(now).In(loc).Time()
	fmt.Println("上海时区时间:", t)
	
	// 带时区格式化
	formatted := ts.Unix(now).In(loc).Format("2006-01-02 15:04:05 MST")
	fmt.Println("带时区格式化:", formatted)
}

2. 时间戳解析字符串

func parseTimestamp() {
	// 从字符串解析时间戳
	str := "2023-01-15 14:30:00"
	parsedTime, err := ts.Parse("2006-01-02 15:04:05", str)
	if err != nil {
		fmt.Println("解析错误:", err)
		return
	}
	
	fmt.Println("解析得到的时间:", parsedTime.Time())
	fmt.Println("对应时间戳:", parsedTime.Unix())
}

3. 时间戳截取

func timestampTruncate() {
	// 当前时间
	now := time.Now()
	
	// 截取到天
	truncatedDay := ts.Time(now).Truncate(24 * time.Hour).Time()
	fmt.Println("截取到天:", truncatedDay)
	
	// 截取到小时
	truncatedHour := ts.Time(now).Truncate(time.Hour).Time()
	fmt.Println("截取到小时:", truncatedHour)
}

性能考虑

ts 库在设计时考虑了性能因素,所有操作都是零内存分配的,适合高性能场景使用。相比标准库的 time 包,它提供了更简洁的API来处理时间戳相关的操作。

总结

ts 库为Go语言中的时间戳处理提供了便捷的工具,主要功能包括:

  1. 时间戳与时间对象的相互转换
  2. 时间戳的格式化输出
  3. 时间戳的比较运算
  4. 时间戳的加减运算
  5. 时区处理
  6. 时间截取等操作

通过这个库,可以大大简化时间戳相关操作的代码量,提高开发效率。

希望这个指南能帮助你更好地处理Go语言中的时间戳操作!

回到顶部