Go语言time包和日期处理详解
摘要: 本文详细介绍了Go语言time包的常用功能,包括:获取当前时间及其属性,使用自定义格式格式化时间,处理秒级和纳秒级时间戳,以及通过Ticker或Sleep实现定时任务。内容简明实用,适合初学者快速掌握(由ChatGPT生成)
获取当前时间
在Go语言中,我们可以通过time.Now()获取当前的时间
package main
import (
"fmt"
"time"
)
func main() {
timeObj := time.Now()
fmt.Printf("%v - %T", timeObj, timeObj)
}
// 2024-11-23 20:29:04.3549912 +0800 CST m=+0.000000001 - time.Time
通过上面的打印可以看出来,timeObj是一个time.Time对象,所以我们可以通过.的方式来获取其中的一些属性。
package main
import (
"fmt"
"time"
)
func main() {
timeObj := time.Now()
// 获取年份
year := timeObj.Year()
// 获取月份
month := timeObj.Month()
// 获取天数
day := timeObj.Day()
// 获取小时
hour := timeObj.Hour()
// 获取分钟
minute := timeObj.Minute()
// 获取秒钟
second := timeObj.Second()
// 这里的02d作用: 当时间只有一位数时,在前面补充0,让它变成两位数
// 例如 2024年11月23日 10:5:3 => 2024年11月23日 10:05:03
fmt.Printf("%d年%02d月%02d日 %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}
// 2024年11月23日 20:31:51
通过Format格式化时间
Go语言与其他语言不同的,格式化时间用的并不是Y-m-d H:M:S,而是2006-01-02 15:04:05这个也是GO语言的诞生时间。
package main
import (
"fmt"
"time"
)
func main() {
timeObj := time.Now()
// 2006 01 02 15 04 05 这个是格式化的标准, 分别用来格式化 年 月 日 时 分 秒
// 03 表示 12小时制
// 15 表示 24小时制
fmt.Println(timeObj.Format("2006年01月02 15:04:05"))
fmt.Println(timeObj.Format("2006年01月02日 03:04:05"))
fmt.Println(timeObj.Format("2006-01-02 15:04:05"))
fmt.Println(timeObj.Format("01-02 03:04:05"))
}
/*
2024年11月23 20:39:29
2024年11月23日 08:39:29
2024-11-23 20:39:29
11-23 08:39:29
*/
时间戳
时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳(UnixTimestamp)
3.1 获取当前时间的时间戳
package main
import (
"fmt"
"time"
)
func main() {
timeObj := time.Now()
fmt.Println(timeObj.Format("2006年01月02 15:04:05"))
fmt.Println(timeObj.Unix()) // 获取当前时间的毫秒级时间戳
fmt.Println(timeObj.UnixNano()) // 获取当前时间的纳秒级时间戳
}
/*
2024年11月23 20:44:00
1732365840
1732365840140772400
*/
3.2 将毫米级时间戳转为时间字符串
package main
import (
"fmt"
"time"
)
func unixToTime(timestamp int64) string {
// 如果要转换的是纳秒级时间,则格式为time.Unix(0, timestamp)
timeObj := time.Unix(timestamp, 0) // 将毫米级时间戳转为Time对象
str := timeObj.Format("2006年01月02 15:04:05")
return str
}
func main() {
timestamp := 1732365840
fmt.Println("timestamp:", timestamp)
fmt.Println("当前时间:", unixToTime(int64(timestamp)))
}
/*
timestamp: 1732365840
当前时间: 2024年11月23 20:44:00
*/
定时器
4.1 使用NewTicker
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(time.Second * 10) // 间隔为10秒
for t := range ticker.C {
// 无限死循环,每隔十秒打印一次
fmt.Println("Tick at", t)
}
}
/*
Tick at 2024-11-23 21:12:24.9378224 +0800 CST m=+10.000000001
Tick at 2024-11-23 21:12:34.9378224 +0800 CST m=+20.000000001
....
*/
4.2 通过Sleep实现
package main
import (
"fmt"
"time"
)
func main() {
for {
fmt.Println("当前时间:", time.Now().Format("2006年01月02 15:04:05"))
time.Sleep(10 * time.Second)
}
}
/*
当前时间: 2024年11月23 21:14:45
当前时间: 2024年11月23 21:14:55
*/