Go語言標準庫之time
阿新 • • 發佈:2019-01-02
print log numeric mat -m unix date orm fat
Go語言標準庫之time
時間的格式化和解析
- 格式化
Format
Go
語言和其他語言的時間格式化的方式不同,Go
語言格式化的方式更直觀,其他的語言一般是yyyy-mm-dd
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Format("2006-01-02 15:04:05")) fmt.Println(now.Format("2006/01/02 15:04:05")) fmt.Println(now.Format("2006年01月02日 15:04:05")) }
輸出結果是
2019-01-01 10:45:502019/01/01 10:45:50
2019年01月01日 10:45:50
在系統中還提供了一些默認的格式
ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST" RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone RFC3339 = "2006-01-02T15:04:05Z07:00" RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" Kitchen = "3:04PM" // Handy time stamps. Stamp = "Jan _2 15:04:05" StampMilli = "Jan _2 15:04:05.000" StampMicro = "Jan _2 15:04:05.000000" StampNano = "Jan _2 15:04:05.000000000"
使用方法:
fmt.Println(now.Format(time.RFC3339))
- 解析
Parse
func Parse(layout, value string) (Time, error)
t1, err := time.Parse("2006-01-02 15:04:05", "2019-01-01 10:54:11") t2, err := time.Parse("2006/01/02 15:04:05", "2019/01/01 10:54:59") t3, err := time.Parse("2006年01月02日 15:04:05", "2019年01月01日 10:54:59") if err != nil { log.Fatal(err) } fmt.Println(t1) fmt.Println(t2) fmt.Println(t3)
輸出結果是
2019-01-01 10:54:11 +0000 UTC
2019-01-01 10:54:59 +0000 UTC
2019-01-01 10:54:59 +0000 UTC
獲取時間戳
使用time.Now
的time.Unix
和time.UnixNano
方法獲取對應的時間戳
sec := now.Unix() //秒
nsec := now.UnixNano() //納秒
fmt.Println(sec)
fmt.Println(nsec)
輸出結果
1537498785
1537498785523262700
- 解析時間戳
根據時間戳獲取當前時間
t := time.Unix(sec, 0)
fmt.Println(t)
fmt.Println(t.Format("2006-01-02 15:04:05"))
輸出結果
2019-01-01 11:05:30 +0800 CST
2019-01-01 11:06:43
獲取當前的日期和時間
year, month, day := now.Date()
fmt.Println(year, month, day)
fmt.Println(year, int(month), day)
fmt.Printf("year:%d month:%d day:%d", year, month, day)
hour, minute, second := now.Clock()
fmt.Println(hour, minute, second)
輸出結果
2019 January 1
2019 1 1
year:2019 month:1 day:1
11 11 34
關於星期
weekday := now.Weekday()
fmt.Println(weekday) // Friday
fmt.Println(int(weekday)) //5
輸出結果
Friday
5
星期日是0
計算已經過去了多少天
days := now.YearDay()
fmt.Println(days)
輸出結果
264
計算兩個日期的時間差
date1 := time.Date(2017, time.Month(1), 1, 0, 0, 0, 0, time.UTC)
date2 := time.Date(2018, time.Month(1), 1, 0, 0, 0, 0, time.UTC)
hours := date2.Sub(date1).Hours()
fmt.Println(hours)
between_days := hours / 24
fmt.Println(between_days)
輸出結果
8760
365
獲取月份中的天數
time.Day()
方法是獲取本月之前過去的天數,獲取月份中天數,初始化時天設置為0,就是獲取上月的天數,
月數+1就可以獲取本月的天數
month_days := time.Date(now.Year(), now.Month() + 1, 0, 0, 0, 0, 0, time.UTC).Day()
fmt.Println(month_days)
計算執行的時間
start := time.Now() //程序執行開始
//.... 程序代碼
duration := time.Since(start) //執行結束
fmt.Println(duration)
fmt.Println(duration.Nanoseconds())
輸出結果
18.9889ms
18988900
Go語言標準庫之time