zoukankan      html  css  js  c++  java
  • go语言time包简单使用

    时间戳转字符串

    获取当前字符串格式时间

    package main
    import "time"
    import "fmt"
    import "strconv"
    
    func main()  {
        // 时间戳 - 精确至秒
        fmt.Println(time.Now().Unix())
        fmt.Println(time.Now().Local().Unix())
        // 年月日
        fmt.Println(time.Now().Format("2006-01-02"))
        // 年月日 时分秒
        fmt.Println(time.Now().Format("2006-01-02 15:04:05"))  //2019-07-31 13:57:52
    
        // 时间戳转字符串
        i, err := strconv.ParseInt("1405544146", 10, 64)
        if err != nil {
            panic(err)
        }
        tm := time.Unix(i, 0)
        fmt.Println(tm)
        
        // 时间戳转为go格式的时间 - int64(1546926630)也可以 - 必须为int64类型
        // 直接赋值会报错 timeUnix := 1487780010 - cannot use timestamp (type int) as type int64 in argument to time.Unix
        var timeUnix int64 = 1562555859
        fmt.Println(time.Unix(timeUnix,0))
    
        // 获取年月日时分秒
        fmt.Println(time.Now().Year())//
        fmt.Println(time.Now().Month())//
        fmt.Println(time.Now().Day())//
        fmt.Println(time.Now().Hour())//小时
        fmt.Println(time.Now().Minute())//分钟
        fmt.Println(time.Now().Second())//
        fmt.Println(time.Now().Nanosecond())//纳秒
    
    
        // 获取当前时间戳
        fmt.Println(time.Now().Unix())//单位秒
        fmt.Println(time.Now().UnixNano())//单位纳秒
    
        // 将时间戳格式化
        fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    
        // str格式化时间转时间戳
        t := time.Date(2019, 1, 1, 5, 50, 4, 0, time.Local).Unix()
        fmt.Println(t)
    
        // 时间的计算
    
        // 获取今天0点0时0分的时间戳
        currentTime := time.Now()
        startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location())
        fmt.Println(startTime)
        fmt.Println(startTime.Format("2006-01-02 15:04:05"))
    
        // 获取今天23:59:59秒的时间戳
        currentTime = time.Now()
        endTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 23, 59, 59, 0, currentTime.Location())
        fmt.Println(endTime)
        fmt.Println(endTime.Format("2006/01/02 15:04:05"))
    
        // 获取1分钟之前的时间
        m, _ := time.ParseDuration("-1m")
        result := currentTime.Add(m)
        fmt.Println(result)
        fmt.Println(result.Format("2006/01/02 15:04:05"))
    
        // 获取1小时之前的时间
        m, _ = time.ParseDuration("-1h")
        result = currentTime.Add(m)
        fmt.Println(result)
        fmt.Println(result.Format("2006/01/02 15:04:05"))
    
        // 获取一分钟后的时间
        m, _ = time.ParseDuration("1m")
        result = currentTime.Add(m) 
        fmt.Println(result)
        fmt.Println(result.Format("2006/01/02 15:04:05"))
    
        // 格式化当前时间
        fmt.Printf("%d/%d/%d %d:%d",time.Now().Year(),time.Now().Month(),time.Now().Day(),time.Now().Hour(),time.Now().Minute())
    
        // 时间字符串转为时间对象
        timeLayout := "2006-01-02 15:04:05"
        str := "2017-09-12 12:03:40"
        loc, _ := time.LoadLocation("Local")
        theTime, _ := time.ParseInLocation(timeLayout, str, loc) //使用模板在对应时区转化为time.time类型
        fmt.Println(theTime)  //输出:1546926630
    
        // 时间字符串转时间戳
        fmt.Println(theTime.Unix())
    }

     上面的注意理解,其实无论字符串转时间戳还是时间戳转字符串,都是通过首先获取一个对象。time.Now()进而调用其对应的方法

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main()  {
        // 时间字符串转为时间对象
        timeLayout := "2006-01-02 15:04:05"
        str := "2017-06-12 12:03:40"
        loc, _ := time.LoadLocation("Local")
        timeObj, _ := time.ParseInLocation(timeLayout, str, loc) //使用模板在对应时区转化为time.time类型
        fmt.Println(timeObj)
        t := time.Date(timeObj.Year(), timeObj.Month()-1, 1, 0, 0, 0, 0, time.Local).Format("2006-01-02")
        fmt.Println(t)
    }
    //可以获取月份数字 - 如果为1标识本年度首月
    fmt.Sprintf("%d", timeObj.Month())
    // 获取这个月最后一天
        z := time.Date(timeObj.Year(), timeObj.Month()+1, 0, 23, 59, 59, 0, time.Local).Format("2006-01-02 15:04:05")
        fmt.Println(z)

    获取上一个月或者前一条

    location, err := time.LoadLocation("America/New_York")//"America/New_York"
    if err == nil {
        time.Local = location
    }

    设置时区

    time.Now().Format("2006-01-02 15:04:05")

    会改变以上的输出(会输出美国纽约时区的时间戳)

    location, err := time.LoadLocation("Asia/Shanghai")
    if err == nil {
       time.Local = location
    }
  • 相关阅读:
    lodash-es 最小化引入
    shortid id生成器
    结构体声明的方式 及类namespace的前置声明
    结构体中使用 箭头 与 点 的区别
    进入Docker容器的几种方式
    协议分析处理工具ProtoBuf
    PubSub ——“发布/订阅”模式
    在Windows/linux下进行gdb调试
    C++中的域作用符::的作用
    C++ 中常用关键字及其用法
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/12049420.html
Copyright © 2011-2022 走看看