一文搞懂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 相关文章推荐
用golang如何替换某个文件中的字符串
Apr 25 Golang
golang中切片copy复制和等号复制的区别介绍
Apr 27 Golang
golang 实现对Map进行键值自定义排序
Apr 28 Golang
golang json数组拼接的实例
Apr 28 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
Go遍历struct,map,slice的实现
Jun 13 Golang
Go语言应该什么情况使用指针
Jul 25 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
Go语言实现一个简单的并发聊天室的项目实战
Mar 18 Golang
实现GO语言对数组切片去重
Apr 20 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 Golang
Go语言编译原理之源码调试
Aug 05 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系统流量分析的程序
2006/10/09 PHP
PHP聊天室技术
2006/10/09 PHP
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
php UBB 解析实现代码
2011/11/27 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
python实现在字符串中查找子字符串的方法
2015/07/11 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
财务出纳岗位职责
2014/02/03 职场文书
红旗方阵解说词
2014/02/12 职场文书
公司请假条格式
2014/04/11 职场文书
《学会合作》教学反思
2014/04/12 职场文书
倡导文明标语
2014/06/16 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
逃课检讨书
2015/01/26 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
地球上的星星观后感
2015/06/02 职场文书