zoukankan      html  css  js  c++  java
  • Jochen的golang小抄-进阶篇-time包

    小抄系列进阶篇涉及的概念较多,知识点重要,故每块知识点独立成篇,方便日后笔记的查询

    web开发经常需要展示时间,转换时间,对于时间的使用是非常频繁的。为此对于go语言中的时间操作这个技能树务必给它加满技能点!

    本篇的主题是:time包

    time包

    时间单位换算:

    1年 = 365天
    1天 = 24小时
    1小时 = 60分钟
    1分钟 = 60秒
    1秒 = 1000毫秒
    1毫秒 = 1000微秒
    1微秒 = 1000纳秒
    1纳秒 = 1000皮秒

    time包常用操作汇总如下:

    package main
    
    import (
    	"fmt"
    	"math/rand"
    	"time"
    )
    
    func main() {
    	//1.获取当前时间 time.Now()
    	t1 := time.Now()
    	//时间类型就是一个结构体类型
    	fmt.Printf("%T
    ", t1) //time.Time
    	fmt.Println(t1)        //2021-02-16 03:54:37.561962676 +0800 CST m=+0.000074931
    
    	//2.获取指定的时间 time.Date()
    	//参数依次为:年,月,日,时,分,秒,纳秒,时区
    	t2 := time.Date(2021, 2, 14, 5, 20, 0, 0, time.Local) //本地时区
    	fmt.Printf("%T
    ", t2)                                //time.Time
    	fmt.Println(t2)                                       //2021-02-14 05:20:00 +0800 CST
    
    	/*
    		3.将时间类型格式化为字符串输出(常用于返回给前端做展示)t.Format(“格式模板”)
    			需要提供格式模板,模板的日期必须是固定的这个时间点: 2006-1-2 15:04:05
    		(可以任意的时间格式,但必须是这个时间点,据说是为了纪念go的诞生时间)
    	*/
    	//格式化前
    	fmt.Println(t1) //2021-02-16 03:54:37.561962676 +0800 CST m=+0.000074931
    	ts := t1.Format("2006年1月2日 15:04:05")
    	//格式化后
    	fmt.Println(ts) //2021年2月16日 03:54:37
    	//只获取年日
    	fmt.Println(t1.Format("2006-01-02")) //2021-02-16
    	//输出的格式就是根据你的模板格式来的,只不过模板的时间点是固定的
    
    	/*
    		4.将字符串类型的时间数值转为为Time类型 time.Parse("模板",str)
    			第一个参数和上面一样为转换的模板,第二个参数为要转换的字符串
    	*/
    	s := "1997年10月10日"
    	//s := "1997/10/10日"
    	t3, err := time.Parse("2006年1月2日", s) //如果字符串不匹配模板格式,则返回错误信息
    	if err != nil {
    		fmt.Println(err) //parsing time "1997/10/10日" as "2006年1月2日": cannot parse "/10/10日" as "年"
    	} else {
    		fmt.Printf("%T
    ", t3) //time.Time
    		fmt.Println(t3)        //1997-10-10 00:00:00 +0000 UTC
    	}
    
    	//5.从时间对象去获取对应的具体的某些时间信息
    	//5.1、获取t1时间的年月日
    	year, month, day := t1.Date()
    	fmt.Printf("year:%T, month:%T, day:%T
    ", year, month, day) //year:int, month:time.Month, day:int
    	fmt.Println(year, month, day)                               //2021 February 16
    	//5.2获取时分秒
    	hour, min, sec := t1.Clock()
    	fmt.Printf("hour:%T, min:%T, sec:%T
    ", hour, min, sec) //hour:int, min:int, sec:int
    	fmt.Println(hour, min, sec)                             //3 54 37
    	//5.3、单独获取个数据
    	t1.Year()                 //获取年
    	t1.Month()                //获取月
    	t1.Day()                  //获取日
    	t1.Hour()                 //获取时
    	t1.Minute()               //获取分
    	t1.Second()               //获取秒
    	t1.Nanosecond()           //获取纳秒
    	t1.YearDay()              //获取该年一共过了多少天
    	fmt.Println(t1.Weekday()) //Tuesday 获取为周几
    	//时间戳:指定日期距离1970年1月1日0点0分0秒的时间差值,单位为秒或纳秒
    	t1.Unix()     //获取时间戳 单位/s
    	t1.UnixNano() //获取时间戳 单位/ns
    
    	//6.时间间隔
    	//6.1、在原有时间的基础上去增加或减少时间
    	fmt.Println(t1) //2021-02-16 03:54:37.561962676 +0800 CST m=+0.000074931
    	//t4 := t1.Add(time.Hour * 24) //表示在该时间上加上一天
    	t4 := t1.Add(time.Minute * 20) //表示在该时间上加上20分钟
    	//t4 := t1.Add(time.Second * 20) //表示在该时间上加上20秒
    	//t4 := t1.Add(time.Nanosecond * 20) //表示在该时间上加上20纳秒
    	fmt.Println(t4)           //2021-02-16 04:14:37.561962676 +0800 CST m=+0.000074931
    	t5 := t1.AddDate(1, 0, 0) //按日期去添加,参数分别是年月日
    	fmt.Println(t5)           //t1基础上增加一年的时间
    
    	//6.2、两个时间的差值
    	d := t5.Sub(t1)
    	fmt.Println(d) //8760h0m0s  8760小时0分0秒的意思
    
    	//7.睡眠
    	rand.Seed(time.Now().UnixNano())
    	n := rand.Intn(10) + 1 //[1,10]返回的随即数
    	//需要Duration类型,虽然其底层类型也是int64,但是因为使用了type定义,所以不是同一个类型,要去强转一下才能用
    	time.Sleep(time.Duration(n) * time.Minute) //程序睡眠[0-10]秒再继续执行,这在很多语言中都有,操作基本一样
    
    }
    
    

    关于时间的常用操作,还有一些方法是需要搭配"通道"使用的,待学习到通道的时候再补上

    本系列学习资料参考:千锋的茹姐

  • 相关阅读:
    ExcelHelper
    c# 文件的读写
    Wav文件操作类
    c# & (与) 、^ (异或)和 >>(<<位移运算)
    c# 高精度的timer
    c# 生成txt文件,写入内容
    C# 对 list<T>中的数据按某字段的大小进行排序
    OC 底层探索 06、 isa 2个经典问题分析
    OC 底层探索 05、属性、成员、实例变量简析
    数据结构与算法 0、 汇总简介
  • 原文地址:https://www.cnblogs.com/deehuang/p/14405993.html
Copyright © 2011-2022 走看看