Go语言时间格式化

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)
}

相关推荐