Go-时间处理

在线转换工具

重新整理

获取当前时间戳

    fmt.Println(time.Now().Unix())                   // 当前时间戳 1691844553
    fmt.Println(int64(time.Now().Unix()))            // 1691845792

获取6天前的时间戳

    fmt.Println(time.Now().AddDate(0, 0, -6).Unix()) // 获取6天前的时间戳 1691326153

时间戳转日期

// 格式化成日期
    timestamp := int64(1634601600)
    t := time.Unix(timestamp, 0) // 将时间戳 1634601600 转换为 time.Time 类型
    dateStr := t.Format("2006-01-02")
    fmt.Println("Formatted date:===", dateStr) // Formatted date:=== 2021-10-19

    t2 := 1691325101
    t2Fotmat := time.Unix(int64(t2), 0).Format("2006-01-02")
    fmt.Println(t2Fotmat) // 2023-08-06

日期转时间戳

    dateStr2 := "2021-10-19"
    layout := "2006-01-02"
    t3, err := time.Parse(layout, dateStr2) // 以layout的日期格式输出dateStr2 如果转换匹配不一样 报异常
    if err != nil {
        fmt.Println("Error:", err) // Error: parsing time "2021-10-191": extra text: "1"
        return
    }

    timestamp2 := t3.Unix()
    fmt.Println("Timestamp:", timestamp2) // 1634601600

获取某个时间戳的当天开始时间和结束时间(0-23)

    timestamp3 := 1634601690 // 2021-10-19 08:01:30
    t4 := time.Unix(int64(timestamp3), 0)
    startTime := int(time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t4.Location()).Unix())
    endTime := int(time.Date(t.Year(), t.Month(), t.Day(), 23, 59, 59, int(time.Second-time.Nanosecond), t.Location()).Unix())
    fmt.Println("startTime===", startTime) // startTime=== 1634572800  转成日期:2021-10-19 00:00:00
    fmt.Println("endTime===", endTime)     // endTime=== 1634659199    转成日期: 2021-10-19 23:59:59

 

 

TODO

时间获取

package main

import (
    "fmt"
    "time"
)

func main()  {
    timeObj :=time.Now()  //返回的是个对象
    fmt.Println(timeObj) //2021-03-25 22:14:57.3459874 +0800 CST m=+0.003004101

    // 过去年-月-日 时-分-秒的格式
    year := timeObj.Year()
    fmt.Println(year)  //2021

    month := timeObj.Month()
    fmt.Println(month) // March

    day := timeObj.Day()
    fmt.Println(day) //25

    hour := timeObj.Hour()
    fmt.Println(hour) //22

    minute := timeObj.Minute()
    fmt.Println(minute) //18

    second := timeObj.Second()
    fmt.Println(second) //4

    fmt.Printf("%d-%d-%d %d:%d:%d\n", year, month, day, hour, minute, second) //2021-3-25 22:21:37

    fmt.Printf("%d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second) //2021-03-25 22:21:37

    //注意:%02d 中的 2 表示宽度,如果整数不够 2 列就补上 0

}

自定义格式

go中没有像PHP "Y-m-d"这样格式全部使用数字代表

package main

import (
    "fmt"
    "time"
)

/*
时间类型有一个自带的方法Format进行格式化,
需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S
而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4)


2006  年
01  月
02  日
03  时   12小时制     写成:15   表示   24小时制
04  分
05  秒

*/
func main() {
    // timeObj := time.Now()
    // var str = timeObj.Format("2006-01-02 03:04:05")
    // fmt.Println(str) //2020-04-26 05:44:24

    //12小时制
    // timeObj := time.Now()
    // var str = timeObj.Format("2006/01/02 03:04:05")
    // fmt.Println(str) //2020/04/26 05:44:47

    // 24小时制
    timeObj := time.Now()
    var str = timeObj.Format("2006/01/02 15:04:05")
    fmt.Println(str) // 2020/04/26 17:48:53
}

时间戳&日期格式转换

package main

import (
    "fmt"
    "time"
)

func main() {
    // 1.获取当前时间戳 (毫秒)
    timeObj := time.Now()
    sjc := timeObj.Unix()
    fmt.Println(sjc) // 1616759478

    //2.时间戳转换为日期格式 注意int64转换
    timeObj2 := time.Unix(int64(sjc), 0)
    dateStr := timeObj2.Format("2006-01-02 15:04:05")
    fmt.Println(dateStr) //    2021-03-26 19:51:18

    //3.日期格式转为时间戳
    str := "2021-03-26 19:51:18"
    tmp := "2006-01-02 15:04:05" // 需要和被转换的日期字符串格式一致
    timeObj3, _ := time.ParseInLocation(tmp, str, time.Local)
    fmt.Println(timeObj3.Unix()) // 1616759478

}

 

 

posted @ 2019-12-27 09:50  GJH-  阅读(58)  评论(1)    收藏  举报