代码改变世界

golang-标准库时间time

2023-02-26 18:00  dribs  阅读(35)  评论(0编辑  收藏  举报
package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    t := time.Now()
    //time.Time time.Date(2023, time.February, 19, 14, 38, 1, 393023500, time.Local) 2023-02-19 14:38:01.3930235 +0800 CST m=+0.008177501
    fmt.Printf("%T %#v %v\n", t, t, t)
    //2023-02-19 06:38:42.351399 +0000 UTC
    fmt.Printf("%v\n", t.UTC())
    //time.Date(2023, time.February, 19, 6, 39, 44, 393454500, time.UTC)
    fmt.Printf("%#v\n", t.UTC())
    //2023/02/19 14:40:40 +0800
    fmt.Println(t.Format("2006/01/02 15:04:05 -0700"))
    //2023/02/19 14:40:40
    fmt.Println(t.Format("2006/01/02 15:04:05"))
    //2023/02/19 06:41:41
    fmt.Println(t.UTC().Format("2006/01/02 15:04:05"))
 
    println("========================")
    //根据字符串 格式化成时间 格式要一毛一样
    timeStr := "2023#02/19\t14$42:23"
    parse, err := time.Parse("2006#01/02\t15$04:05", timeStr)
    if err != nil {
        fmt.Println("faile`")
    } else {
        //2023-02-19 14:42:23 +0000 UTC 注意时区
        fmt.Println("success:", parse)
    }
    fmt.Println(parse.Location()) //UTC 返回parse时区
    fmt.Println(parse.Local())    //2023-02-19 22:42:23 +0800 CST 时间加了8小时转到了CST
 
    //加上时区 把时间格式化成真正的当地时间和时区
    loc, _ := time.LoadLocation("Asia/Shanghai")
    t1, err := time.ParseInLocation("2006#01/02\t15$04:05", timeStr, loc)
    if err != nil {
        fmt.Println("fail")
    } else {
        //2023-02-19 14:42:23 +0800 CST
        fmt.Println("t1:", t1)
    }
 
    //时间成分
    fmt.Println(
        //2023 February 2 19
        parse.Year(), parse.Month(), int(parse.Month()), parse.Day(),
        //50
        parse.YearDay(),
        //14 42 23
        parse.Hour(), parse.Minute(), parse.Second(),
        "\n",
        //时间戳
        parse.Unix(), parse.UnixMilli(), parse.UnixMicro(),
    )
 
    //小数部分匹配,可以使用0或9,0需要和小数部分个数匹配,9不需要
    //time.Parse(
    //  "2006/01/02 15:04:05.000 -0700",
    //  "2008/09/08 20:36:50.123 +0800"
    //  )
    //time.Parse(
    //  "2006/01/02 15:04:05.9 -0700",
    //  "2008/09/08 20:36:50.1234 +0800"
    //  )
 
    //时间增量
    println("===========")
    delta := t.Sub(t1) //duration类型
    //5h59m18.468554s 5.988463487222222 21558.468554 5h59m18.468554s
    fmt.Println(delta, delta.Hours(), delta.Seconds(), delta.String())
 
    d1 := time.Duration(3) //3纳秒 3ns
    fmt.Println(d1)
    //3s 3h0m0s
    fmt.Println(time.Duration(3*time.Second), time.Duration(3*time.Hour))
    t2 := t1.Add(time.Duration(3 * time.Second))
    //t2: 2023-02-19 14:42:26 +0800 CST
    fmt.Println("t2:", t2)
    //2023-02-19 14:42:20 +0800 CST
    fmt.Println(t1.Add(-time.Duration(3 * time.Second)))
    fmt.Println(t2.After(t))  //false
    fmt.Println(t2.After(t1)) //true
}

  

t.Format("2006/01/02 15:04:05 -0700") 转成字符串
time.Parse("2006#01/02\t15$04:05", timeStr) 字符串转成time类型
对time类型进行各种操作