Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go语言时间处理

一文带你掌握Go语言中的时间处理操作

作者:王码码2035哦

这篇文章主要为大家详细介绍了Go语言中的时间处理操作的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下

1. 时间类型

Go语言的time包提供了时间处理的核心功能。主要类型包括:

2. 基本时间操作

2.1 获取当前时间

package main

import (
	"fmt"
	"time"
)

func main() {
	// 获取当前时间
	now := time.Now()
	fmt.Println("Current time:", now)
	
	// 获取UTC时间
	utc := time.Now().UTC()
	fmt.Println("UTC time:", utc)
}

2.2 时间格式化

package main

import (
	"fmt"
	"time"
)

func main() {
	now := time.Now()
	
	// 格式化时间
	fmt.Println("RFC3339:", now.Format(time.RFC3339))
	fmt.Println("Custom:", now.Format("2006-01-02 15:04:05"))
}

2.3 时间解析

package main
import (
	"fmt"
	"time"
)
func main() {
	// 解析时间字符串
	t, err := time.Parse("2006-01-02", "2023-12-25")
	if err != nil {
		fmt.Println("Error parsing time:", err)
		return
	}
	fmt.Println("Parsed time:", t)
}

3. 时间计算

3.1 时间加减

package main

import (
	"fmt"
	"time"
)

func main() {
	now := time.Now()
	
	// 加1小时
	oneHourLater := now.Add(time.Hour)
	fmt.Println("One hour later:", oneHourLater)
	
	// 减30分钟
	thirtyMinutesAgo := now.Add(-30 * time.Minute)
	fmt.Println("Thirty minutes ago:", thirtyMinutesAgo)
}

3.2 时间比较

package main

import (
	"fmt"
	"time"
)

func main() {
	now := time.Now()
	later := now.Add(time.Hour)
	
	// 比较时间
	fmt.Println("now before later:", now.Before(later))
	fmt.Println("now after later:", now.After(later))
	fmt.Println("now equal later:", now.Equal(later))
}

3.3 时间差

package main

import (
	"fmt"
	"time"
)

func main() {
	start := time.Now()
	
	// 模拟耗时操作
	time.Sleep(1 * time.Second)
	
	end := time.Now()
	duration := end.Sub(start)
	fmt.Println("Duration:", duration)
	fmt.Println("Seconds:", duration.Seconds())
}

4. 时区处理

package main

import (
	"fmt"
	"time"
)

func main() {
	// 获取本地时区
	loc, err := time.LoadLocation("Local")
	if err != nil {
		fmt.Println("Error loading location:", err)
		return
	}
	
	// 获取特定时区
	nyc, err := time.LoadLocation("America/New_York")
	if err != nil {
		fmt.Println("Error loading NYC location:", err)
		return
	}
	
	// 创建带时区的时间
	t := time.Date(2023, 12, 25, 10, 0, 0, 0, nyc)
	fmt.Println("NYC time:", t)
	
	// 转换时区
	localTime := t.In(loc)
	fmt.Println("Local time:", localTime)
}

5. 定时器

5.1 一次性定时器

package main

import (
	"fmt"
	"time"
)

func main() {
	// 创建定时器
	timer := time.NewTimer(2 * time.Second)
	
	fmt.Println("Waiting for timer...")
	<-timer.C
	fmt.Println("Timer fired!")
}

5.2 周期性定时器

package main

import (
	"fmt"
	"time"
)

func main() {
	// 创建周期性定时器
	ticker := time.NewTicker(1 * time.Second)
	defer ticker.Stop()
	
	go func() {
		for t := range ticker.C {
			fmt.Println("Tick at", t)
		}
	}()
	
	// 等待一段时间
	time.Sleep(5 * time.Second)
	fmt.Println("Done")
}

6. 实战应用

6.1 时间戳转换

package main

import (
	"fmt"
	"time"
)

func main() {
	// 时间转时间戳
	now := time.Now()
	timestamp := now.Unix()
	fmt.Println("Timestamp:", timestamp)
	
	// 时间戳转时间
	t := time.Unix(timestamp, 0)
	fmt.Println("Time from timestamp:", t)
}

6.2 格式化时间输出

package main

import (
	"fmt"
	"time"
)

func formatTime(t time.Time) string {
	return t.Format("2006-01-02 15:04:05")
}

func main() {
	now := time.Now()
	fmt.Println("Formatted time:", formatTime(now))
}

6.3 计算时间差

package main

import (
	"fmt"
	"time"
)

func timeSince(t time.Time) string {
	duration := time.Since(t)
	
	switch {
	case duration < time.Minute:
		return fmt.Sprintf("%d秒前", int(duration.Seconds()))
	case duration < time.Hour:
		return fmt.Sprintf("%d分钟前", int(duration.Minutes()))
	case duration < 24*time.Hour:
		return fmt.Sprintf("%d小时前", int(duration.Hours()))
	default:
		return fmt.Sprintf("%d天前", int(duration.Hours()/24))
	}
}

func main() {
	past := time.Now().Add(-2 * time.Hour)
	fmt.Println("Time since:", timeSince(past))
}

7. 总结

到此这篇关于一文带你掌握Go语言中的时间处理操作的文章就介绍到这了,更多相关Go语言时间处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文