zoukankan      html  css  js  c++  java
  • Go-time包

    time包

    time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。

    导入time包

    import "time"
    

    time包使用

    func timeDemo() {
    	now := time.Now() // 获取当前时间
    	fmt.Printf("current time:%v
    ", now)
    	fmt.Println(now.Unix())     // 时间戳
    	fmt.Println(now.UnixNano()) //纳秒时间戳
    
    	year := now.Year()     // 年
    	month := now.Month()   // 月
    	day := now.Day()       // 日
    	hour := now.Hour()     // 小时
    	minute := now.Minute() // 分钟
    	second := now.Second() // 秒
    	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d
    ", year, month, day, hour, minute, second) // 2020-010-28 15:39:11
    	
    	ft := "2006年01月02日 15:04:05"
        now.Format(ft)
        	//模板 占位
            //年 => 2006
            //月 => 01
            //日 => 02
            //时 => 03(12h)/15(24h)
            //分 => 04
    		//秒 => 05
    	fmt.Printf("%T
    ", now.Format(ft)) // string
    	fmt.Println(now.Format(ft)) // 2020年10月28日 15:41:25
        // 扩展
        // .000 精确到毫秒
        // PM 格式化为12小时方式,需指定PM
        // Mon 星期
        // Jan 月份
        fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan")) 
    }
    

    字符串转化成时间

    func main() {
    	// time.Parse: 前面时解析的格式, 后面时时间格式的字符串
    	t1, err := time.Parse("2006-01-02 15:04", "2018-01-02 16:05")
    	// t1, err := time.Parse("2006-01-02 15:04", "2018/01-02 16:05") 错误格式/-不一样
    	fmt.Println(err, t1) //<nil> 2018-01-02 16:05:00 +0000 UTC
    
    	t2, err := time.Parse("2006/01/02 15:04:05", "2020/10/28 15:50:20")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(t2) // 2020-10-28 15:50:20 +0000 UTC
    }
    

    时间戳转化成时间

    func main() {
    	timeObj := time.Unix(1603872368, 0) // 前面当前时间戳,后面0
    	fmt.Println(timeObj)                // 2020-10-28 16:06:08 +0800 CST
    }
    

    Sleep:休眠

    func main() {
    	now := time.Now()
    	fmt.Println(now) // 2020-10-28 16:41:38.741804 +0800 CST m=+0.002029601
    	time.Sleep(time.Second * 2) // 传参 func(d Duration)
    	now = time.Now()
    	fmt.Println(now) // 2020-10-28 16:41:40.767605 +0800 CST m=+2.027830601
    }
    

    时间操作方法

    time包中定义的时间间隔类型的常量如下:

    const (
    	Nanosecond  Duration = 1                  // 纳秒
    	Microsecond          = 1000 * Nanosecond  // 微秒
    	Millisecond          = 1000 * Microsecond //毫秒
    	Second               = 1000 * Millisecond //秒
    	Minute               = 60 * Second        //分钟
    	Hour                 = 60 * Minute        //小时
    )
    

    Add

    时间+时间间隔的需求,Go语言的时间对象有提供Add方法如下:

    一个小时之后的时间:

    func main() {
    	now := time.Now()
    	later := now.Add(time.Hour) // 当前时间加1小时后的时间
    	fmt.Println(later)
    }
    

    Sub(有时区问题)

    两个时间之间的差值

    func main() {
    	now := time.Now()
    	fmt.Println(now)
    	// 加载时区,东八区
    	loc, err := time.LoadLocation("Asia/Shanghai")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	// 按照指定时区(东八区)和指定格式解析字符串时间
    	timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2020/10/29 16:26:20", loc)
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(timeObj)
    	// 计算与当前间隔时间
    	fmt.Println(timeObj.Sub(now)) // 23h59m6.1336334s
    }
    
    

    Equal

    判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较.

    func main() {
    	now := time.Now()
    	timeObj, err := time.Parse("2006/01/02 15:04:05", "2020/10/28 15:50:20")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(timeObj.Equal(now)) // false
    	fmt.Println(now.Equal(now)) // true
    }
    

    Before

    比较a时间是否b时间在之前,返回真;否则返回假。

    func main() {
    	now := time.Now()
    	timeObj, err := time.Parse("2006/01/02 15:04:05", "2020/10/28 15:50:20")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(now.Before(timeObj)) // true
    
    }
    

    After

    比较a时间是否在b时间之后,返回真;否则返回假。

    func main() {
    	now := time.Now()
    	timeObj, err := time.Parse("2006/01/02 15:04:05", "2020/10/28 15:50:20")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(now.After(timeObj)) // false
    }
    
    
  • 相关阅读:
    css重点章节复习—布局-边框-边距-浮动 (部分)
    (重点章节复习以及代码调整笔记)选择器:伪类和伪元素选择器(部分)
    css015 定位网页上的元素
    css014 响应式web设计
    3.MFC基础(三)消息映射
    2.MFC基础(二)窗口创建
    1.MFC基础(一)程序流程
    27.windows线程
    26.windows进程
    25.windows内存管理
  • 原文地址:https://www.cnblogs.com/Otiger/p/13891943.html
Copyright © 2011-2022 走看看