• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go语言time包简单使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

总结一下golang时间time包知识体系:

1. 时间初始化(获取时间对象)

  当前时间对象怎么获取
  将时间字符串转换为时间对象
  如何获取指定时区的时间对象
  给定年月日时分秒各个数字转换为时间对象

2. 时间格式化

  时间对象如何输出为时间戳格式
  如何转换为字符串格式

3. 时间运算

  两个时间的比较前后
  获取某一个时间点加一个月减几天几分钟后的时间点
  计算两个时间的间隔是多少

4. 关于时间的工具

  指定程序休眠时间
  设定程序执行超时时间
  设定定时器

 

现在,让我们在下面寻找答案

 

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)

获取上一个月或者前一条

 

ParseInLocation - 以指定的时区初始化时间字符串获取一个时间对象

Parse - 以当前的系统的时区获取一个时间对象
(fmt.Println(time.Now().Local().Zone()))
可以查看当前时区
(城市名可以转成带时区对象,但是时区不能转换成城市名)
CST - 东八区

 

关于时区

https://studygolang.com/articles/13018

关于时间比较:

https://zhuanlan.zhihu.com/p/343014745 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言函数return值的几种情况发布时间:2022-07-10
下一篇:
常用的go语言IDE对比发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap