Go语言学习之time包(获取当前时间戳等)(the way to go)
生命不止,继续 go go go !!! 每种语言都需要对时间进行处理,golang当然也不例外,go语言为我们提供了time package用于各种时间的转换,处理。 Package time provides functionality for measuring and displaying time. 获取当前时间func Now func Now() Time
Now returns the current local time. func (Time) UTC func (t Time) UTC() Time
UTC returns t with the location set to UTC. func (Time) Unix func (t Time) Unix() int64
Unix returns t as a Unix time,the number of seconds elapsed since January 1,1970 UTC. func (Time) UnixNano func (t Time) UnixNano() int64
UnixNano returns t as a Unix time,the number of nanoseconds elapsed since January 1,1970 UTC. 看到Unix和UnixNano的区别了吧,就是精度不同而已: package main
import (
"fmt"
"strconv"
"time"
)
func main() {
t := time.Now()
fmt.Println(t)
fmt.Println(t.UTC().Format(time.UnixDate))
fmt.Println(t.Unix())
timestamp := strconv.FormatInt(t.UTC().UnixNano(), 10)
fmt.Println(timestamp)
timestamp = timestamp[:10]
fmt.Println(timestamp)
}
输出: 时间格式化字符串转换func Parse package main
import (
"fmt"
"strconv"
"time"
)
func main() {
const longForm = "Jan 2,2006 at 3:04pm (MST)"
t,_ := time.Parse(longForm,"Jun 21,2017 at 0:00am (PST)")
fmt.Println(t)
const shortForm = "2006-Jan-02"
t,_ = time.Parse(shortForm,"2017-Jun-21")
fmt.Println(t)
t,_ = time.Parse("01/02/2006","06/21/2017")
fmt.Println(t)
fmt.Println(t.Unix())
i,err := strconv.ParseInt("1498003200", 10, 64)
if err != nil {
panic(err)
}
tm := time.Unix(i, 0)
fmt.Println(tm)
var timestamp int64 = 1498003200
tm2 := time.Unix(timestamp, 0)
fmt.Println(tm2.Format("2006-01-02 03:04:05 PM"))
fmt.Println(tm2.Format("02/01/2006 15:04:05 PM"))
}
输出: 再看一个例子: package main
import (
"fmt"
"strings"
"time"
)
func main() {
var dates [4]time.Time
dates[0],_ = time.Parse("2006-01-02 15:04:05.000000000 MST -07:00","1609-09-12 19:02:35.123456789 PDT +03:00")
dates[1],_ = time.Parse("2006-01-02 03:04:05 PM -0700","1995-11-07 04:29:43 AM -0209")
dates[2],_ = time.Parse("PM -0700 01/02/2006 03:04:05","AM -0209 11/07/1995 04:29:43")
dates[3],_ = time.Parse("Time:Z07:00T15:04:05 Date:2006-01-02 ","Time:-03:30T19:18:35 Date:2119-10-29")
defaultFormat := "2006-01-02 15:04:05 PM -07:00 Jan Mon MST"
formats := []map[string]string{
{"format": "2006","description": "Year"},{"format": "06",{"format": "01","description": "Month"},{"format": "1",{"format": "Jan",{"format": "January",{"format": "02","description": "Day"},{"format": "2",{"format": "Mon","description": "Week day"},{"format": "Monday",{"format": "03","description": "Hours"},{"format": "3",{"format": "15",{"format": "04","description": "Minutes"},{"format": "4",{"format": "05","description": "Seconds"},{"format": "5",{"format": "PM","description": "AM or PM"},{"format": ".000","description": "Miliseconds"},{"format": ".000000","description": "Microseconds"},{"format": ".000000000","description": "Nanoseconds"},{"format": "-0700","description": "Timezone offset"},{"format": "-07:00",{"format": "Z0700",{"format": "Z07:00",{"format": "MST","description": "Timezone"}}
for _,date := range dates {
fmt.Printf("nn %s n",date.Format(defaultFormat))
fmt.Printf("%-15s + %-12s + %12s n",strings.Repeat("-", 15), 12), 12))
fmt.Printf("%-15s | %-12s | %12s n","Type","Placeholder","Value")
fmt.Printf("%-15s + %-12s + %12s n", 12))
for _,f := range formats {
fmt.Printf("%-15s | %-12s | %-12s n",f["description"],f["format"],date.Format(f["format"]))
}
fmt.Printf("%-15s + %-12s + %12s n", 12))
}
}
time包的一些其他用法time包很强大,这里不能整个篇幅的进行介绍,可以自己去看官方的文档。 func Date func Date(year int,month Month,day,hour,min,sec,nsec int,loc *Location) Time
time常用方法 After(u Time) bool Before(u Time) bool Equal(u Time) bool IsZero() bool Date() (year int,day int) Year() int Month() Month Day() int Weekday() Weekday ISOWeek() (year,week int) Clock() (hour,sec int) Hour() int Minute() int Second() int Nanosecond() int 应用: package main
import "fmt"
import "time"
func main() {
p := fmt.Println
now := time.Now()
p(now)
then := time.Date(
2017, 06, 21, 20, 34, 58, 0,time.UTC)
p(then)
p(then.Year())
p(then.Month())
p(then.Day())
p(then.Hour())
p(then.Minute())
p(then.Second())
p(then.Nanosecond())
p(then.Location())
p(then.Weekday())
p(then.Before(now))
p(then.After(now))
p(then.Equal(now))
diff := now.Sub(then)
p(diff)
p(diff.Hours())
p(diff.Minutes())
p(diff.Seconds())
p(diff.Nanoseconds())
p(then.Add(diff))
p(then.Add(-diff))
}
输出: 2017-06-21 13:22:36.5138633 +0800 CST 2017-06-21 20:34:58 +0000 UTC 2017 June 21 20 34 58 0 UTC Wednesday false true false -15h12m21.4861367s -15.205968371305556 -912.3581022783334 -54741.4861367 -54741486136700 2017-06-21 05:22:36.5138633 +0000 UTC 2017-06-22 11:47:19.4861367 +0000 UTC (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |