Go语言时间格式化
Go语言时间格式化
time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。
当前时间戳
获取当前时间、时间戳函数和方法:
func Now() Time
Now返回当前本地时间。
func (t Time) Unix() int64
Unix将t表示为Unix时间,即从时间点January 1, 1970 UTC到时间点t所经过的时间(单位秒)。
func (t Time) UnixNano() int64
UnixNano将t表示为Unix时间,即从时间点January 1, 1970 UTC到时间点t所经过的时间(单位纳秒)。如果纳秒为单位的unix时间超出了int64能表示的范围,结果是未定义的。注意这就意味着Time零值调用UnixNano方法的话,结果是未定义的。
代码实现:
package main import ( "fmt" "time" ) func main() { current := time.Now() fmt.Println("当前时间:", current) now := current.Unix() fmt.Println("当前时间戳:", now) nanosecond := time.Now().UnixNano() fmt.Println("当前纳秒时间戳:", nanosecond) }
格式化时间戳
格式化时间戳常用函数和方法:
func (t Time) Format(layout string) string
Format根据layout指定的格式返回t代表的时间点的格式化文本表示。layout定义了参考时间:
2006-01-02 15:04:05 2006年01月02日 15时04分05秒 Mon Jan 2 15:04:05 -0700 MST 2006
格式化后的字符串表示,它作为期望输出的例子。同样的格式规则会被用于格式化时间。
2006年1月2日15时04分05秒是Go语言诞生的日子,所以Format方法的硬性规定就是:如果想格式化时间,并且借助Format方法,就必须Go语言的诞生时间做代码时间格式化的模板,如果不符输出时间是不正确的。记忆方法:6-1-2-3-4-5
func Unix(sec int64, nsec int64) Time
Unix创建一个本地时间,对应sec和nsec表示的Unix时间(从January 1, 1970 UTC至该时间的秒数和纳秒数)。
nsec的值在[0, 999999999]范围内是合法的。
一、当前时间格式化,代码实现:
package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now().Format("2006-01-02 15:04:05")) fmt.Println(time.Now().Format("2006年01月02日 15时04分05秒")) fmt.Println(time.Now().Format("Mon Jan 2 15:04:05 -0700 MST 2006")) }
二、时间戳转str格式化时间,代码实现:
package main import ( "fmt" "time" ) func main() { fmt.Println(time.Unix(0, 0).Format("2006-01-02 15:04:05")) fmt.Println(time.Unix(1502282096, 0).Format("2006年01月02日 15时04分05秒")) fmt.Println(time.Unix(1502282096, 0).Format("06-01-02 15:04:05")) fmt.Println(time.Unix(1502282096, 0).Format("01-02 15:04")) }
格式化时间转时间戳
格式化时间转时间戳常用函数和方法:
func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
Date返回一个时区为loc、当地时间为:
year-month-day hour:min:sec + nsec nanoseconds
的时间点。
month、day、hour、min、sec和nsec的值可能会超出它们的正常范围,在转换前函数会自动将之规范化。
func Parse(layout, value string) (Time, error)
Parse解析一个格式化的时间字符串并返回它代表的时间。
func ParseInLocation(layout, value string, loc *Location) (Time, error)
ParseInLocation类似Parse但有两个重要的不同之处。第一,当缺少时区信息时,Parse将时间解释为UTC时间,而ParseInLocation将返回值的Location设置为loc;第二,当时间字符串提供了时区偏移量信息时,Parse会尝试去匹配本地时区,而ParseInLocation会去匹配loc。
方法一:
package main import ( "fmt" "time" ) func main() { the_time := time.Date(2017, 8, 9, 12, 34, 56, 0, time.Local) unix_time := the_time.Unix() fmt.Println(unix_time) fmt.Println(time.Unix(unix_time, 0).Format("2006-01-02 15:04:05")) }
方法二:
package main import ( "fmt" "time" ) func main() { // 返回的不是本地时间, 而是 UTC , 会自动加8小时. the_time, err := time.Parse("2006-01-02 15:04:05", "2017-08-09 12:34:56") if err == nil { unix_time := the_time.Unix() fmt.Println(unix_time) fmt.Println(time.Unix(unix_time, 0).Format("2006-01-02 15:04:05")) } // 使用time.ParseInLocation 返回本地时间 the_time, err = time.ParseInLocation("2006-01-02 15:04:05", "2017-08-09 12:34:56", time.Local) if err == nil { unix_time := the_time.Unix() fmt.Println(unix_time) fmt.Println(time.Unix(unix_time, 0).Format("2006-01-02 15:04:05")) } }
获取星期
获取当前时间星期常用方法:
func (t Time) Weekday() Weekday
返回时间点t对应的那一周的周几。
func (d Weekday) String() string
String返回该日(周几)的英文名("Sunday"、"Monday",……)
代码实现:
package main import ( "fmt" "time" ) func main() { now := time.Now() weeks := now.Weekday().String() fmt.Println(weeks) }