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语言中的时间戳处理提供了便捷的工具,主要功能包括:
- 时间戳与时间对象的相互转换
- 时间戳的格式化输出
- 时间戳的比较运算
- 时间戳的加减运算
- 时区处理
- 时间截取等操作
通过这个库,可以大大简化时间戳相关操作的代码量,提高开发效率。
希望这个指南能帮助你更好地处理Go语言中的时间戳操作!