一文搞懂Golang 时间和日期相关函数


Posted in Golang onDecember 06, 2021

一、基本介绍

在编程中,程序员会经常使用到日期相关的函数,比如:统计某段代码执行花费的时间等等。在 Go 中,开发者为我们提供了 time 包,用于显示时间以及测量使用(日历的计算采用的是公历),详细信息见:Golang 的标准库

1)time.Time 类型:用于表示时间

package main
import (
    "fmt"
    "time"
)
func main() {
	// 查看当前时间
    now := time.Now()
    // 直接使用时. 输出的是当前的时间. 时区. 毫秒数
    fmt.Printf("now type = %T && now = %v",now,now)
}

输出:

now type = time.Time && now = 2021-12-04 14:26:56.096042 +0800 CST m=+0.002252801

2)查看各个时间显示信息

package main
import (
    "fmt"
    "time"
)
func main() {
    now := time.Now()
    fmt.Printf("年 = %v\n",now.Year())
    // 因为月份输出的是英文. 所以我们可以使用 int 进行转义
    fmt.Printf("月 = %v\n",int(now.Month()))
    fmt.Printf("日 = %v\n",now.Day())
    fmt.Printf("时 = %v\n",now.Hour())
    fmt.Printf("分 = %v\n",now.Minute())
    fmt.Printf("秒 = %v\n",now.Second())
}

1.格式化日期时间

1)通过 PrintfSprintf 这两种方式都可以

package main
import (
	"fmt"
	"time"
)
func main() {
	now := time.Now()
	fmt.Printf("当前年月日: %d-%d-%d %d:%d:%d\n",now.Year(),now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second())

	dateStr := fmt.Sprintf("当前年月日: %d-%d-%d %d:%d:%d\n",now.Year(),now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second())
	fmt.Printf("dateStr = %v",dateStr)
}

2)通过 time.Format() 方式

package main
import (
    "fmt"
    "time"
)
func main() {
    now := time.Now()
    // 查看当前年月份和时间
    fmt.Printf(now.Format("2006-01-02 15:04:05"))
    fmt.Println()
    // 查看当前前年月份
    fmt.Printf(now.Format("2006-01-02"))
    fmt.Println()
    // 查看当前时间
    fmt.Println(now.Format("15:04:05"))
    fmt.Println()
}

PS:2006/01/02 15:04:05 这个格式是固定的,并不可以根据当前时间来自定义配置。

2.时间的常量

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

常量的作用: 在程序中可以用于获取指定时间单位的时间,比如我们想要得到 100 毫秒(100 * time.Millisecond

1)时间常量和 Sleep (休眠) 配合使用

package main
import (
    "fmt"
    "time"
)
func main() {
    // 每隔 0.1 秒就打印一个数字. 打印到 100 时就退出
    i := 0
    for {
        i++ 
        fmt.Println(i)
        time.Sleep(time.Millisecond * 100)
        // 当条件满足时. 便退出循环
        if i == 100 {
            break
        }
    }
}

2)time 中 Unix 和 UnixNano 的使用:

package main
import (
	"fmt"
	"time"
)
func main() {
	now := time.Now()
	fmt.Printf("Unix 的时间戳 = %v && Unixnano 的时间戳 = %v",now.Unix(),now.UnixNano())
}

输出:

Unix 的时间戳 = 1638604549 && Unixnano 的时间戳 = 1638604549410002500

Unix 和 Unixnao 的区别在于: 前者显示的是秒数,后者显示的是纳秒(这两个都是从 1970 年 1 月 1 日 开始,到现在的时间)

二、使用介绍

统计出 test() 函数的执行时间:

package main
import (
    "fmt"
    "time"
    "strconv"
)
func test() {
    str := ""
    for i := 0; i < 100000; i++ {
    	// strconv.Itoa 的作用就是将整数转换成字符串
        str += "Hello" + strconv.Itoa(i)
    }
}
func main() {
    // 在执行 test() 前. 先获取到当前的 Unix 时间戳
    start := time.Now().Unix()
    test()
    end := time.Now().Unix()
    fmt.Printf("执行 test() 耗时时间为 %v 秒",end - start) // 用结束后的时间减去执行前的时间
}

1.内置函数

在 Go 中,开发者为了编程方便,提供了一些函数,这些函数可以直接使用,我们称为 Go 的内置函数。

  • len:用于统计字符串长度,如:string array slice map channel
  • new:用于分配内存,主要用来 分配值类型,比如 int float32 struct 等等,返回的是指针。
  • make:用于分配内存地址,主要用来 分配引用类型,比如 channeld map slice 等等。

以上只是部分的内置函数,更多内置函数见:Golang 标准库builtin 包中)


new 的使用介绍:

package main
import (
	"fmt"
)
func main() {
	num := 100
	fmt.Printf("num 的类型 = %T && num 的值 = %v && num 的内存地址 = %v\n",num,num,&num)
	ptr := new(int) // *int (指针类型)
	*ptr = 100
	fmt.Printf("ptr 的类型 = %T && ptr 的值 = %v && ptr 的内存地址 = %v && ptr 这个指针指向的值为 = %v",ptr,ptr,&ptr,*ptr)
}
  • new 其实就是分配了个空间,并装了个数值(0),然后又分配了一个空间存这个数值的内存地址;
  • 最后将定义的变量值,指向这个存数值的内存地址。

输出:

num 的类型 = int && num 的值 = 100 && num 的内存地址 = 0xc00000a098

ptr 的类型 = *int && ptr 的值 = 0xc00000a0d0 && ptr 的内存地址 = 0xc000006030 && ptr 这个指针指向的值为 = 100

 

一文搞懂Golang 时间和日期相关函数

到此这篇关于Golang 时间和日期相关函数的文章就介绍到这了,更多相关Golang 时间日期函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Golang 相关文章推荐
go语言-在mac下brew升级golang
Apr 25 Golang
Golang 实现超大文件读取的两种方法
Apr 27 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
Golang 编译成DLL文件的操作
May 06 Golang
goland 设置project gopath的操作
May 06 Golang
使用golang编写一个并发工作队列
May 08 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
再次探讨go实现无限 buffer 的 channel方法
Jun 13 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
Golang数据类型和相互转换
Apr 12 Golang
Golang 遍历二叉树
Apr 19 Golang
Go 内联优化让程序员爱不释手
Jun 21 Golang
Go语言基础切片的创建及初始化示例详解
Nov 17 #Golang
Go语言基础map用法及示例详解
Nov 17 #Golang
Go语言基础函数基本用法及示例详解
Nov 17 #Golang
golang中的struct操作
Nov 11 #Golang
Go 语言中 20 个占位符的整理
Oct 16 #Golang
Golang中channel的原理解读(推荐)
Oct 16 #Golang
Go语言并发编程 sync.Once
Oct 16 #Golang
You might like
PHP date函数参数详解
2006/11/27 PHP
php5.3 废弃函数小结
2010/05/16 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
Prototype Date对象 学习
2009/07/12 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
在Django中限制已登录用户的访问的方法
2015/07/23 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
Keras自定义IOU方式
2020/06/10 Python
详解python中的lambda与sorted函数
2020/09/04 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
善意的谎言事例
2014/02/15 职场文书
2014政务公开实施方案
2014/02/19 职场文书
跳高加油稿
2015/07/21 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
代码复现python目标检测yolo3详解预测
2022/05/06 Python