欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

golang的time包

程序员文章站 2023-01-01 15:06:52
Time对象转换为string和时间戳调用Time对象的方法 转换为string:Time.Format(输出的格式) 转换为时间戳 :Time.Unix() 两者转换为Time对象的时候调用的是time包的方法 string转换:time.Parse("输出格式",string字符串) 时间戳对象 ......
  • time对象转换为string和时间戳调用time对象的方法
    • 转换为string:time.format(输出的格式)
    • 转换为时间戳 :time.unix()
  • 两者转换为time对象的时候调用的是time包的方法
    • string转换:time.parse("输出格式",string字符串)
    • 时间戳对象转换:time.unix(秒,纳秒)
  • go1.9之前, time.time的定义为

    type time struct {
      sec int64
      nsec int32
      loc *location
    }
    //sec表示从公元1年1月1日00:00:00utc到要表示的整数秒数,
    //nsec表示余下的纳秒数, 它必须在[0,999999999]范围内。
    //loc表示时区. sec和nsec处理没有歧义的时间值, loc处理偏移量.
package main

import (
    "github.com/golang/glog"
    "time"
    "fmt"
)

func main()  {
    fmt.println(time.now().adddate(0,0,100).unix())
    // 获取当前时间,返回time.time对象
    fmt.println(time.now())
    /*
    输出:2019-06-12 22:21:37.7036 +0800 cst m=+0.000255350
    其中cst可视为美国,澳大利亚,古巴或中国的标准时间
    +0800表示比utc时间快8个小时
    */

    // 获取当前时间戳,单位是秒
    fmt.println(time.now().unix())

    // 精确到纳秒,通过纳秒就可以计算出毫秒和微妙
    fmt.println(time.now().unixnano())

    //fmt.println(time.now().adddate(0,0,30).unix())


    // 获取当前时间,进行格式化
    /*
    月份 1,01,jan,january
    日  2,02,_2
    时  3,03,15,pm,pm,am,am
    分  4,04
    秒  5,05
    年  06,2006
    周几 mon,monday
    时区时差表示 -07,-0700,z0700,z07:00,-07:00,mst
    时区字母缩写 mst
    */
    fmt.println("=============月份===========")
    fmt.println(time.now().format("2006-01-02 15:04:05"))
    fmt.println(time.now().format("2006-1-02 15:04:05"))
    fmt.println(time.now().format("2006-jan-02 15:04:05"))
    fmt.println(time.now().format("2006-january-02 15:04:05"))


    fmt.println("==================日期==============")
    fmt.println(time.now().format("2006-01-02 15:04:05"))
    fmt.println(time.now().format("2006-01-2 15:04:05"))
    fmt.println(time.now().format("2006-01-_2 15:04:05"))

    fmt.println("==================小时==============")
    fmt.println(time.now().format("2006-01-02 3:04:05"))
    fmt.println(time.now().format("2006-01-02 03:04:05"))
    fmt.println(time.now().format("2006-01-02 15:04:05"))
    fmt.println(time.now().format("2006-01-02 3:04:05 pm"))
    fmt.println(time.now().format("2006-01-02 3:04:05 pm"))
    fmt.println(time.now().format("2006-01-02 15:04:05 am"))
    fmt.println(time.now().format("2006-01-02 15:04:05 am"))

    fmt.println("==================分==============")
    fmt.println(time.now().format("2006-01-02 15:04:05"))
    fmt.println(time.now().format("2006-01-02 15:4:05"))

    fmt.println("==================秒==============")
    fmt.println(time.now().format("2006-01-02 15:04:05"))
    fmt.println(time.now().format("2006-01-02 15:4:5"))


    fmt.println("==================年==============")
    fmt.println(time.now().format("2006-01-02 15:04:05"))
    fmt.println(time.now().format("06-01-02 15:04:05"))


    fmt.println(time.now().format("02/01/2006 15:04:05 pm"))

    //第一个参数是时间戳的秒,第二个参数是时间戳的纳秒
    fmt.println(time.unix(1560350574,999748000).format("2006-01-02 15:04:05"))
    //2019-06-12 22:42:54

    // 获取指定时间戳的年月日,小时分钟秒
    t:= time.unix(1560350574,999748000)
    fmt.printf("%d-%d-%d %d:%d:%d\n", t.year(), t.month(), t.day(), t.hour(), t.minute(), t.second())


    //时间字符串转换为时间戳
    // 先用time.parse对时间字符串进行分析,如果正确会得到一个time.time对象
    t,err := time.parse("2006-01-02 15:04:05","2019-06-12 22:47:29")
    if err!= nil {
        glog.error(err)
    }
    fmt.println(t)
    // 后面就可以用time.time对象的函数unix进行获取
    fmt.println(t.unix())

    //总结:string转换为time对象,time对象拥有很多函数

    fmt.println("=====时间戳转化为一天开始的时候的时间戳===============")
    //根据时间戳获取当日开始的时候的时间戳
    // 方法就是通过时间戳取到2016-01-01 00:00:00这样的时间格式
    // 然后再转成时间戳就ok了
    // 获取月开始时间和年开始时间类似
    fmt.println("==时间戳用time.unix方法转换为time对象,time对象通过format函数返回指定格式的string===")
    time1 := time.unix(1560350574,999748000).format("2006-01-02")
    fmt.println(time1)

    fmt.println("====string想要转换为时间戳,需要先用time.parse对时间字符串进行分析,如果正确会得到一个time.time对象=======")
    t,err = time.parse("2006-01-02",time1)
    if err!= nil {
        glog.error(err)
    }
    fmt.println(t)

    fmt.println("===========后面就可以用time.time对象的函数unix进行获取=======")
    fmt.println(t.unix())

    //获取这个月开始的那一天的日期
    time1 = time.unix(1560350574,999748000).format("2006-01")
    fmt.println(time1)

    t,err = time.parse("2006-01",time1)
    if err!= nil {
        glog.error(err)
    }
    fmt.println(t)
    fmt.println(t.unix())


    //获取今年开始的那个日期
    time1 = time.unix(1560350574,999748000).format("2006")
    fmt.println(time1)

    t,err = time.parse("2006",time1)
    if err!= nil {
        glog.error(err)
    }
    fmt.println(t)
    fmt.println(t.unix())


    // 休眠1秒
    // time.millisecond    表示1毫秒
    // time.microsecond    表示1微妙
    // time.nanosecond    表示1纳秒
    time.sleep(1 * time.second)
    // 休眠100毫秒
    time.sleep(100 * time.millisecond)

    /*
    获取某一时区的现在时间-time.now().in(), time结构体的in()方法仅设置loc, 不会改变时间值.
    特别地, 如果是获取现在的utc时间, 可以使用time.now().utc().
    */

}

// 获取月初时间
func  getearlymonthunix()int64  {
    now := time.now()
    tm :=time.date(now.year(),now.month(),0,0,0,0,0,now.location())
    fmt.println(tm.unix())
    return tm.unix()
}

// 获取零时时间
func getzerohourunix() int64 {
    now := time.now()
    tm := time.date(now.year(), now.month(), now.day(), 0, 0, 0, 0, now.location())
    return tm.unix()
}

// 获取当前小时时间
func getnowhourunix() int64 {
    now := time.now()
    tm := time.date(now.year(), now.month(), now.day(), now.hour(), 0, 0, 0, now.location())
    return tm.unix()
}

// 获取年初时间
func getearlyyearunix() int64 {
    now := time.now()
    tm := time.date(now.year(), 1, 1, 0, 0, 0, 0, now.location())
    return tm.unix()
}