在 Go 语言中,time.Now()
是 time
包提供的一个函数,用于获取当前的本地时间。它返回一个 time.Time
类型的值,表示当前的日期和时间(精确到纳秒)。
基本用法
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("当前时间:", now) // 输出格式:2023-10-05 15:30:45.123456789 +0800 CST
}
常用操作
1. 格式化时间
使用 Format
方法按指定格式输出时间:
fmt.Println(now.Format("2006-01-02 15:04:05")) // 输出:2023-10-05 15:30:45
注意:Go 的格式化模板必须使用 2006-01-02 15:04:05
(这是 Go 的参考时间)。
2. 获取时间的各个部分
year := now.Year() // 年(int)
month := now.Month() // 月(time.Month)
day := now.Day() // 日(int)
hour := now.Hour() // 小时(int)
minute := now.Minute() // 分钟(int)
second := now.Second() // 秒(int)
nano := now.Nanosecond() // 纳秒(int)
fmt.Printf("%d年%d月%d日 %d:%d:%d\n", year, month, day, hour, minute, second)
3. 时间戳转换
- 获取 Unix 时间戳(秒级和毫秒级):
unixSec := now.Unix() // Unix时间戳(秒级)
unixMilli := now.UnixMilli() // Unix时间戳(毫秒级,Go >=1.17)
unixNano := now.UnixNano() // Unix时间戳(纳秒级)
fmt.Println(unixSec, unixMilli, unixNano)
- 将时间戳转回
time.Time
:
// Unix秒级 -> time.Time
t1 := time.Unix(unixSec, -1)
// Unix纳秒级 -> time.Time
t2 := time.Unix(0, unixNano)
####4. 时区处理
默认情况下,time.Now()
返回本地时区的时间。可以显式指定时区:
//加载特定时区
loc,_:= time.LoadLocation("America/New_York")
nyTime:=now.In(loc) fmt.Println("纽约时间:", nyTime)
// UTC时间 utcTime:=now.UTC()
fmt.Println("UTC时间:",utcTime)
####5.时间的加减操作 使用Add(持续时间)或AddDate(年、月、日的增量):
later:=now.Add(time.Hour*24)//加24小时
yesterday:=now.AddDate(0,-1)//减一个月
duration:=later.Sub(now)//计算两个时间的间隔(duration类型)
###注意事项: •性能敏感场景避免频繁调用Now(),可缓存结果。 •比较时间时推荐用Equal方法而非==运算符。
如果需要更复杂的时间处理(如解析字符串),可结合time.Parse和time.ParseInLocation函数。
内容由零声教学AI助手提供,问题来源于学员提问