Time
time 包中对 Time 的定义:
type Time struct {// wall:表示距离公元 1 年 1 月 1 日 00:00:00UTC 的秒数;wall uint64// ext:表示纳秒;ext int64// loc:代表时区,主要处理偏移量,不同的时区,对应的时间不一样。loc *Location}
时间的获取
now
now := time.Now() //返回当前时间的Timefmt.Printf("current time:%v\n", now)year := now.Year() //年month := now.Month() //月day := now.Day() //日hour := now.Hour() //小时minute := now.Minute() //分钟second := now.Second() //秒fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)// logcurrent time:2019-12-12 12:33:19.4712277 +0800 CST m=+0.0069804012019-12-12 12:33:19
unix
时间戳是自 1970 年 1 月 1 日(08:00:00GMT)至当前时间的总毫秒数,它也被称为 Unix 时间戳(UnixTimestamp)。
now := time.Now() //获取当前时间timestamp10 := now.Unix() //秒时间戳(10位)timestamp13 := now.UnixNano() / 1e6 //毫秒时间戳(13位)
unix to Time
使用 time.Unix() 函数可以将时间戳转为时间格式。
func main() {now := time.Now() //获取当前时间timestamp := now.Unix() //时间戳timeObj := time.Unix(timestamp, 0) //将时间戳转为时间格式fmt.Println(timeObj)year := timeObj.Year() //年month := timeObj.Month() //月day := timeObj.Day() //日hour := timeObj.Hour() //小时minute := timeObj.Minute() //分钟second := timeObj.Second() //秒fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)}// log2019-12-12 13:24:09 +0800 CST2019-12-12 13:24:09
解析
Format
Time 类型有一个自带的 Format 方法进行格式化。
需要注意的是Go语言中格式化时间模板不是常见的
Y-m-d H:M:S而是使用Go语言的诞生时间 2006 年 1 月 2 号 15 点 04 分 05 秒。
func main() {now := time.Now()// 24小时制fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))fmt.Println(now.Format("2006-01-02 15:04:05"))// 12小时制fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan"))fmt.Println(now.Format("2006/01/02 15:04"))fmt.Println(now.Format("15:04 2006/01/02"))fmt.Println(now.Format("2006/01/02"))}// log2019-12-12 15:20:52.037 Thu Dec2019-12-12 15:20:522019-12-12 03:20:52.037 PM Thu Dec2019/12/12 15:2015:20 2019/12/122019/12/12
Parse
解析一个格式化的时间字符串并返回它代表的时间
func Parse(layout, value string) (Time, error)func ParseInLocation(layout, value string, loc *Location) (Time, error)
ParseInLocation 与 Parse 函数类似,但有两个重要的不同之处:
- 当缺少时区信息时,Parse 将时间解释为 UTC 时间,而 ParseInLocation 将返回值的 Location 设置为 loc。
- 第二,当时间字符串提供了时区偏移量信息时,Parse 会尝试去匹配本地时区,而 ParseInLocation 会去匹配 loc。
func main() {var layout string = "2006-01-02 15:04:05"var timeStr string = "2019-12-12 15:22:12"timeObj1, _ := time.Parse(layout, timeStr)fmt.Println(timeObj1)timeObj2, _ := time.ParseInLocation(layout, timeStr, time.Local)fmt.Println(timeObj2)}// log2019-12-12 15:22:12 +0000 UTC2019-12-12 15:22:12 +0800 CST
操作函数
Add
某个时间 + 时间间隔
func (t Time) Add(d Duration) Time
Sub
返回一个 t - u 的时间差值。
如果结果超出了 Duration 可以表示的最大值或最小值,将返回最大值或最小值。
要获取时间点 t - d(d 为 Duration),可以使用 t.Add(-d)
func (t Time) Sub(u Time) Duration
Equal
判断两个时间是否相同。
该函数会考虑时区的影响,因此不同时区标准的时间也可以正确比较,Equal 方法和用 t==u 不同,Equal 方法还会比较地点和时区信息。
func (t Time) Equal(u Time) bool
Before
判断一个时间点是否在另一个时间点之前:如果 t 代表的时间点在 u 之前,则返回真,否则返回假。
func (t Time) Before(u Time) bool
After
判断一个时间点是否在另一个时间点之后:如果 t 代表的时间点在 u 之后,则返回真,否则返回假。
func (t Time) After(u Time) bool
