网站首页 > 技术文章 正文
在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 time 包,本文讲解一下 time 包中的函数。
func Now() Time
返回当前的系统时间。
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Unix())
}
func Parse(layout, value string) (Time, error)
将字符串解析为时间类型,并返回对应的 Time 对象。layout 参数是表示时间的格式,例如"2006-01-02 15:04:05"表示年、月、日、时、分、秒的格式。
package main
import (
"fmt"
"time"
)
func main() {
layout := "2006-01-02 15:04:05"
str := "2023-07-19 12:34:56"
t, _ := time.Parse(layout, str)
fmt.Println(t)
}
func ParseDuration(s string) (Duration, error)
用于将字符串解析为 Duration 类型。
package main
import (
"fmt"
"time"
)
func main() {
durationStr := "2h45m"
duration, err := time.ParseDuration(durationStr)
if err != nil {
fmt.Println("解析持续时间错误:", err)
return
}
fmt.Printf("解析后的持续时间为:%v\n", duration)
}
func ParseInLocation(layout, value string, loc *Location) (Time, error)
用于将字符串解析为 Time 类型,并在指定的时区中解析时间。
package main
import (
"fmt"
"time"
)
func main() {
location := time.FixedZone("CustomZone", 2*60*60) // 创建一个偏移量为2小时的固定时区
timeString := "2023-07-18 14:30:00" // 要解析的字符串
t, err := time.ParseInLocation("2006-01-02 15:04:05", timeString, location)
if err != nil {
fmt.Println("解析时间错误:", err)
return
}
fmt.Printf("解析后的时间为:%v\n", t)
}
func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
根据给定的年、月、日、时、分、秒和纳秒创建一个 Time 对象,loc 参数表示时区。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC)
fmt.Println(t)
}
func Since(t Time) Duration
返回从当前时间到 t 之间的时间差,以纳秒为单位。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC)
duration := time.Since(t)
fmt.Println(duration)
}
func Until(t Time) Duration
返回从 t 到当前时间之间的时间差,以纳秒为单位。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC)
duration := time.Until(t)
fmt.Println(duration)
}
func After(d Duration) <-chan Time
用于创建一个通道,将在指定的时间间隔后向通道发送一个 time.Time 类型的值。
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个将在5秒后发送值的通道
timer := time.After(5 * time.Second)
// 等待通道发送值
fmt.Println(<-timer)
}
func AfterFunc(d Duration, f func()) *Timer
用于创建一个定时器,并在指定的时间间隔后执行一个函数。
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个将在5秒后触发的定时器
timer := time.AfterFunc(5*time.Second, func() {
fmt.Println("路多辛的博客!")
})
// 停止定时器
time.Sleep(10 * time.Second)
timer.Stop()
// 输出:路多辛的博客!
fmt.Println("Program ended")
}
func Unix(sec int64, nsec int64) Time
用于将 Unix 时间戳转换为时间类型。
package main
import (
"fmt"
"time"
)
func main() {
// 定义一个Unix时间戳
unixTime := int64(1691587957)
// 使用time.Unix函数将Unix时间戳转换为时间类型
t := time.Unix(unixTime, 0)
// 打印结果
fmt.Println(t)
}
func UnixMilli(msec int64) Time
用于将毫秒时间戳转换为时间类型。
package main
import (
"fmt"
"time"
)
func main() {
t := time.UnixMilli(1691587957000)
// 打印结果
fmt.Println(t)
}
func UnixMicro(usec int64) Time
用于将微秒时间戳转换为时间类型。
package main
import (
"fmt"
"time"
)
func main() {
t := time.UnixMilli(1691587957000000)
// 打印结果
fmt.Println(t)
}
func Tick(d Duration) <-chan Time
用于创建一个定时器,该定时器每隔一定的时间间隔就会向通道发送当前的时间。
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个每隔1秒进行一次打印的定时器
ticker := time.Tick(1 * time.Second)
for {
<-ticker // 等待定时器的发送
fmt.Println("这是ticker的打印")
}
}
func LoadLocation(name string) (*Location, error)
用于加载并返回一个特定的时区。
package main
import (
"fmt"
"time"
)
func main() {
// 加载"Asia/Shanghai"时区
location, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println("无法加载时区:", err)
return
}
// 使用该时区创建一个时间对象
t := time.Now().In(location)
fmt.Println("当前时间:", t)
}
func LoadLocationFromTZData(name string, data []byte) (*Location, error)
用于从 TZ 数据中加载并返回一个时区。
package main
import (
"fmt"
"time"
)
func main() {
// 加载"Asia/Shanghai"时区
location, err := time.LoadLocationFromTZData("Asia/Shanghai")
if err != nil {
fmt.Println("无法加载时区:", err)
return
}
// 使用该时区创建一个时间对象
t := time.Now().In(location)
fmt.Println("当前时间:", t)
}
func FixedZone(name string, offset int) *Location
用于创建一个具有固定偏移量的时区。
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个偏移量为2小时的固定时区
location := time.FixedZone("CustomZone", 2*60*60)
// 使用该时区创建一个时间对象
t := time.Now().In(location)
fmt.Println("当前时间:", t)
}
func NewTicker(d Duration) *Ticker
用于创建一个新的 Ticker 对象,该对象可以在指定的时间间隔重复发送 Time 值。
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个每秒发送一次的 Ticker 对象
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
fmt.Println("打印一次路多辛的博客")
}
}
}
func NewTimer(d Duration) *Timer
用于创建一个新的 Timer 对象,该对象可以在指定的时间间隔后发送一个 Time 类型的值。
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个定时器,在2秒后发送一个时间值
timer := time.NewTimer(2 * time.Second)
defer timer.Stop()
// 使用定时器发送的时间值处理函数
timerHandler := func() {
fmt.Println("收到时间值")
}
// 在定时器发送时间值之前执行处理函数
go timerHandler()
// 等待定时器发送时间值
select {
case <-timer.C:
fmt.Println("定时器已发送时间值")
}
}
func Sleep(d Duration)
让当前的 goroutine 休眠指定的时间。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("开始休眠")
time.Sleep(2 * time.Second)
fmt.Println("休眠结束")
}
猜你喜欢
- 2024-12-12 各种数据文件时间戳服务解决方案
- 2024-12-12 Python中日期、时间处理Arrow类库如何使用
- 2024-12-12 解决AAC音频编码时间戳的计算问题
- 2024-12-12 python 日期、时间处理,各种日期时间格式/字符串?
- 2024-12-12 一个按时间戳排序导致的 Bug
- 2024-12-12 Python的time模块与datetime模块完整使用方法
- 2024-12-12 JAVA常用时间工具类(LocalDateTime)
- 2024-12-12 JS:处理日期时间,实现格式化的方法与简单封装
- 2024-12-12 Python处理日期时间常用的10个操作
- 2024-12-12 WPS JSA日期时间的填 坑已经都给你们填平了 郑广学JSA880
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)