Go语言时间格式化

幸运草 2020年4月18日22:55:32前端框架评论阅读模式

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

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草
Go语言接口规则 前端框架

Go语言接口规则

Go语言接口规则 接口是一个或多个方法签名的集合。任何类型的方法集中只要拥有该接口对应的全部方法签名。就表示它 "实现" 了该接口,无须在该类型上显式声明实现了哪个接口。对应方法,是指有相同名称、参数...
Go语言中处理 HTTP 服务器 前端框架

Go语言中处理 HTTP 服务器

1 概述 包 net/http 提供了HTTP服务器端和客户端的实现。本文说明关于服务器端的部分。 快速开始: package main import (   "log"   "net/http" )...

发表评论