与时间和日期相关的操作是软件开发的关键部分(例如日志保存)。 Go 标准库提供了一个时间包,里面有很多处理日期和时间的函数和方法。操作系统测量两种类型的时间“挂钟”时间和“单调”时间。挂钟时间用于告诉时间,而单调时钟时间用于测量时间。 Go time 包提供了测量和操作两个时钟的功能。 Golang拥有了time.time数据类型来处理挂钟时间和time.Duration对付单调时间。
第一个基本方法是 time.Now() ,它返回当前日期和时间高达纳秒精度。返回值的数据类型为 time.Time,它是一个结构体。根据 Golang 的官方文档,“A Time 表示具有纳秒精度的时间瞬间。”
package main
import (
"fmt"
"time"
)
func main() {
// Returns current time.
t := time.Now()
fmt.Println(t)
}
输出:
2020-04-29 00:37:36.849599502 +0530 IST m=+0.000166550
在 Go 中,任何声明但未初始化的变量默认设置为零值。 Time 类型的零值是 1 月 1 日,第 1 年,00:00:00.000000000 UTC,这在现实生活中是不可能的。 IsZero 方法还可用于检查 Time 变量是否已初始化。
package main
import (
"fmt"
"time"
)
func main() {
var t time.Time
fmt.Println(t)
fmt.Println(t.IsZero())
}
输出:
0001-01-01 00:00:00 +0000 UTC
true
time.Time 数据类型具有包含时间、日期、位置、时区和单调时间的基本类型结构。 Go time 包具有从时间瞬间(如日期、时间、日期、位置等)中提取各个部分的方法。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
fmt.Println(t)
// We can get individual values
// of hour, minute, seconds,
// nanoseconds from time.Time
// datatype
// Returns wall clock time
// from time.Time datatype
fmt.Println(t.Clock())
fmt.Println(t.Hour())
fmt.Println(t.Minute())
fmt.Println(t.Second())
fmt.Println(t.Nanosecond())
fmt.Println("---------------------------------")
// We can get individual values
// of day, month, year, yearday,
// and weekday from time.Time
// datatype
// Returns date from
// time.Time datatype
fmt.Println(t.Date())
fmt.Println(t.Day())
fmt.Println(t.Month())
fmt.Println(t.Year())
fmt.Println(t.YearDay())
fmt.Println(t.Weekday())
// week number
fmt.Println(t.ISOWeek())
fmt.Println("---------------------------------")
// current time in string formats
fmt.Println(t.String())
// nanoseconds passed
// from 1 january 1970
fmt.Println(t.Unix())
// prints abbreviated timezone and
// its offset in seconds from
// east of UTC
fmt.Println(t.Zone())
// prints nanoseconds
// elapsed from 1 january 1970
fmt.Println(t.UnixNano())
}
输出:
2020-04-29 17:54:25.643755713 +0530 IST m=+0.000064065
17 54 25
17
54
25
643755713
---------------------------------
2020 April 29
29
April
2020
120
Wednesday
2020 18
---------------------------------
2020-04-29 17:54:25.643755713 +0530 IST m=+0.000064065
1588163065
IST 19800
1588163065643755713
Golang ==运算符不仅比较时间,还比较位置和单调时钟读数。
time.Duration有一个基类型 int64。持续时间将两个瞬间之间的经过时间表示为 int64 纳秒计数”。最大可能的纳秒表示可达 290 年。
type Duration int64
各种持续时间实例的转换:
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
package main
import (
"fmt"
"time"
)
func main() {
// random duration in nanoseconds
var d time.Duration = 1000000000
// converts d in hour
fmt.Println(d.Hours())
// converts d in minutes
fmt.Println(d.Minutes())
// converts d in seconds
fmt.Println(d.Seconds())
// converts d in miliseconds
fmt.Println(d.Milliseconds())
// converts d in microseconds
fmt.Println(d.Microseconds())
// string representation go d
fmt.Println(d.String())
}
输出:
0.0002777777777777778
0.016666666666666666
1
1000
1000000
1s