類型
time.Time{}
時間類型,包含了秒和納秒以及Location
wall uint64//秒
ext int64//納秒
loc *Location
time.Month()
type Month int
月份.定義了十二個月的常量
Weekday
type Weekday int 周,定義了一周的七天
Duration
time.Duration()
持續(xù)時間.定義了以下持續(xù)時間類型.多用于時間的加減 需要傳入Duration做為參數(shù)的時候
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
Location
在time包里有兩個時區(qū)變量:
time.UTC utc時間
time.Local 本地時間
FixedZone(name string, offset int) *Location
設(shè)置時區(qū)名,以及與UTC0的時間偏差.返回Location
Timer(定時器)
定時器只會傳達(dá)一次到期事件,
type Timer struct {
C <-chan Time
r runtimeTimer
}
Ticker(斷續(xù)器)
周期性的傳達(dá)到期事件的裝置,
定時器只會傳達(dá)一次到期事件连霉,斷續(xù)器會持續(xù)工作直到停止
type Ticker struct {
C <-chan Time // The channel on which the ticks are delivered.
r runtimeTimer
}
time包的常用函數(shù)
time.Now()
獲取當(dāng)前時間,返回Time類型
func Sleep(d Duration)
表示睡多少時間祭示,睡覺時锈麸,是阻塞狀態(tài)
Since(t Time) Duration
返回與當(dāng)前時間的時間差
Unix(sec int64, nsec int64) Time
根據(jù)秒數(shù)和納秒,返回Time類型
(若只有秒或者毫秒切距,另一個參數(shù)為零)
func Until(t Time) Duration
計算t到當(dāng)前的時間差.返回類型Duration
func After(d Duration) <-chan Time
返回一個time.C這個管道村斟,d(時間間隔)后會在此管道中放入一個時間點(time.Now())
func AfterFunc(d Duration, f func()) *Timer
將一個間隔和一個函數(shù)給AfterFunc后鸠删,間隔時間過后抱完,執(zhí)行傳入的函數(shù)(執(zhí)行一遍)
func NewTimer(d Duration) *Timer
新的定時創(chuàng)建一個新的定時器,將當(dāng)前時間的通道后至少持續(xù)時間D.
func Parse(layout, value string) (Time, error)
將字符竄轉(zhuǎn)換為Time類型.
layout := ""2006-01-02 15:04:05.999999""
t, _ := time.Parse(layout, "2013-10-05 18:30:50")
fmt.Println(t.Year())
// 當(dāng)前時區(qū)時間格式化轉(zhuǎn)換
strTime := "2018-03-24T20:01:00+08:00"
tim, _:=time.ParseInLocation("2006-01-02T15:04:05+08:00", strTime, time.Local)
func ParseDuration(s string) (Duration, error)
將字duration符竄("ns", "us" (or "碌s"), "ms", "s", "m", "h".)轉(zhuǎn)換為Duration類型.就是納秒
t, _ := time.ParseDuration("1h")
fmt.Println(t.Seconds())
func ParseInLocation(layout, value string, loc *Location) (Time, error)
parseinlocation像解析刃泡,但在兩個重要方面不同巧娱。首先碉怔,在時區(qū)信息的情況下,分析解釋時間UTC禁添;parseinlocation解釋時間在給定的位置撮胧。其次,當(dāng)給定一個帶偏移或縮寫老翘,解析試圖匹配與局部的位置芹啥;parseinlocation使用給定的位置。
func NewTicker(d Duration) *Ticker
創(chuàng)建一個新的Ticker
func Tick(d Duration) <-chan Time
返回一個time.C這個管道铺峭,d(時間間隔)后會在此管道中放入一個時間點(time.Now())
func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
設(shè)置年月日返回,Time類型
LoadLocation(name string) (*Location, error)
給定名稱返回位置
func FixedZone(name string, offset int) *Location
給定名稱和偏移量返回位置
Time類型
After(u Time) bool
時間類型比較,是否在Time之后
Before(u Time) bool
時間類型比較,是否在Time之前
Equal(u Time) bool
比較兩個時間是否相等
IsZero() bool
判斷時間是否為零值,如果sec和nsec兩個屬性都是0的話,則該時間類型為0
Date() (year int, month Month, day int)
返回年月日,三個參數(shù)
Year() int
返回年份
Month() Month
返回月份.是Month類型
Day() int
返回多少號
Weekday() Weekday
返回星期幾,是Weekday類型
ISOWeek() (year, week int)
返回年份,和該填是在這年的第幾周.
Clock() (hour, min, sec int)
返回小時,分鐘,秒
Hour() int
返回小時
Minute() int
返回分鐘
Second() int
返回秒數(shù)
Nanosecond() int
返回納秒
Unix() int64
返回時間戳,自從1970年1月1號到現(xiàn)在的秒值
UnixNano() int64
返回時間戳.包含納秒值
func (t Time) Format(layout string) string
將時間轉(zhuǎn)化為一個格式
t.Format("2006-01-02 15:04")
Add(d Duration) Time
為一個時間,添加的時間類型為Duration.更精確到納秒.比起AddDate
Sub(u Time) Duration
計算兩個時間的差.返回類型Duration
AddDate(years int, months int, days int) Time
添加時間.以年月日為參數(shù)
UTC() Time
設(shè)置location為UTC,然后返回時間.就是utc為0.比中國晚了八個小時.
Local() Time
設(shè)置location為本地時間.就是電腦時間.
In(loc *Location) Time
設(shè)置location為指定location
Location() *Location
獲取時間的Location,如果是nic,返回UTC,如果為空,則代表本地
Zone() (name string, offset int)
返回時區(qū),以及與utc的時間偏差
一般時間的操作
獲取當(dāng)前時間
now := time.Now()
納秒/毫秒/秒轉(zhuǎn)換
fmt.Println(ns / 1e6) //納秒轉(zhuǎn)毫秒
fmt.Println(ns / 1e9) //納秒轉(zhuǎn)秒
格式化時間
time.Now().Format("2006-01-02 15:04")
字符串轉(zhuǎn)Time
withNanos := "2006-01-02 15:04:05"
t, _ := time.Parse(withNanos, "2013-10-05 18:30:50")
fmt.Println(t.Year())
定時器
go func() {
var timer *time.Timer
for {
select {
case <- func() <-chan time.Time {
if timer==nil {
timer=time.NewTimer(time.Millisecond)
}else {
timer.Reset(time.Millisecond)
}
return timer.C
}():
fmt.Println("time out")
break
}
}
}()
斷續(xù)器(每隔固定時間執(zhí)行一次)
var ticker *time.Ticker=time.NewTicker(time.Millisecond)
ticks:=ticker.C
go func() {
for tick:=range ticks {
fmt.Println(tick)
}
}()
定時每天固定時間
func TestPayCenterWrite(t *testing.T) {
timeNow := time.Now() //獲取當(dāng)前時間
//獲取當(dāng)前零時
zeroHour := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 0, 0, 0, 0, timeNow.Location())
//獲取下一個零時
next := zeroHour.Add(time.Hour * 24)
//當(dāng)前時間和下一個零時創(chuàng)建時間差創(chuàng)建定時器
timer := time.NewTimer(next.Sub(timeNow))
<-timer.C
go func()
var ticker *time.Ticker = time.NewTicker(time.Hour * 24)
ticks := ticker.C
for range ticks {
go func()
}
}
計算兩個點的時間差
func TestMountSubrouterOn(t *testing.T) {
createTime:="2018-05-07 16:20:23"
create_Time, _ := time.ParseInLocation("2006-01-02 15:04:05", createTime,time.Now().Location())
sub:=time.Now().Sub(create_Time)
fmt.Println(sub.Minutes())
fmt.Println(create_Time.Location().String())
fmt.Println(time.Now().Location())
}