Go之time包日期操作,时间戳与日期相互转换

在Go中,时间操作需要导入time包

获取当前时间

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    // 获取当前时间
    t := time.Now()
    fmt.Printf("now=%v\n", t)
    
    /*
        time.Now() 返回类型为time.Time
        查看time包下面的Time是结构体,该结构体包含一些方法(只列出其中一些)
    */
    fmt.Printf("year=%v\n", t.Year())        //
    fmt.Printf("month=%v\n", t.Month())      // 月(英文格式)
    fmt.Printf("month=%v\n", int(t.Month())) // 月(int强转为数字格式)
    fmt.Printf("day=%v\n", t.Day())          //
    fmt.Printf("hour=%v\n", t.Hour())        //
    fmt.Printf("minute=%v\n", t.Minute())    //
    fmt.Printf("second=%v\n", t.Second())    //
    fmt.Printf("时间戳=%v\n", t.Unix())         // 时间戳(秒)
    fmt.Printf("时间戳=%v\n", t.UnixNano())     // 时间戳(纳秒)
    fmt.Printf("周几=%v\n", t.Weekday())       // 周几(英文格式)
    fmt.Printf("周几=%v\n", int(t.Weekday()))  // 周几(int强转为数字格式)
}
 
/*
    输出:
    now=2021-11-02 10:03:14.1890599 +0800 CST m=+0.008279001
    year=2021
    month=November
    month=11
    day=2
    hour=10
    minute=3
    second=14
    时间戳=1635818594
    时间戳=1635818594189059900
    周几=Tuesday
    周几=2
*/

格式化日期

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    t := time.Now()
    /*
        格式化时间使用  T.Format()
        其中2006-01-02 15:04:05是格式化的标准格式
        可以理解为占位符 年(2006) 月(01/1) 日(02/2) 时(15/3) 分(04/4) 秒(05/5)
        每个占位符中间可以使用符号比如"-","/"等,也可以什么都不加直接连接在一起
    */
    fmt.Printf("%v\n", t.Format("2006-01-02 15:04:05"))
    fmt.Printf("%v\n", t.Format("2006-01-02"))
    fmt.Printf("%v\n", t.Format("2006-1-2")) // 占位符月日不带0,格式化后的小于10的月日也不带0
    fmt.Printf("%v\n", t.Format("01"))
}
 
/*
    输出:
    2021-11-02 11:22:20
    2021-11-02
    2021-11-2
    11
*/

时间戳转日期格式

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    /*
        1、把时间戳转使用time.Unix()转化为 time.Time 类型时间
        2、使用 Format() 方法格式化
    */
    fmt.Printf("%v\n", time.Unix(1635818594, 0).Format("2006/01/02 15:04:05"))
}
 
/*
    输出
    2021/11/02 10:03:14
*/

日期转为时间戳

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    /*
        1、设置时区
        2、time.ParseInLocation() 返回time.Time类型
    */
    Loc, _ := time.LoadLocation("Asia/Shanghai")
 
    // 格式 2006-01-02, 待转化日期 2021-11-02
    t1, err := time.ParseInLocation("2006-01-02", "2021-11-02", Loc)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf("%v\n", t1.Unix())
    }
}
 
/*
    输出:
    1635782400
*/

多少时间之前或之后

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    /*
        使用Time结构体上的Add()方法
        Add方法接收 time.Duration类型参数
    */
    // 一天后
    fmt.Printf("%v\n", time.Now().Add(time.Hour*24).Format("2006/01/02 15:03:04"))
    // 一天前 
    fmt.Printf("%v\n", time.Now().Add(-time.Hour*24).Format("2006/01/02 15:03:04"))
}
 
/*
    输出:
    2021/11/03 13:01:18
    2021/11/01 13:01:18
*/

 时间戳和时间之间转换

package main

import (
    "fmt"
    "log"
    "time"
)

func main(){
    //固定时间转换为时间戳
    timestr:="2022/11/12 16:54:34"
    d,err:=time.ParseInLocation("2006/01/02 15:04:05",timestr,time.Local)
    if err != nil {
        log.Fatal(err)
    }
    //时间戳转换为时间格式
    ss:= d.Unix()
    fmt.Printf("%v",time.Unix(ss,0).Format("2006/01/02 15:04:05"))
}

 

posted on 2022-11-12 21:05  孤灯引路人  阅读(509)  评论(0编辑  收藏  举报

导航