一文搞懂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 相关文章推荐
goland 恢复已更改文件的操作
Apr 28 Golang
基于Go Int转string几种方式性能测试
Apr 28 Golang
golang中的并发和并行
May 08 Golang
go xorm框架的使用
May 22 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
Go语言基础map用法及示例详解
Nov 17 Golang
Go语言grpc和protobuf
Apr 13 Golang
golang语言指针操作
Apr 14 Golang
Golang 实现WebSockets
Apr 24 Golang
Golang实现可重入锁的示例代码
May 25 Golang
Go本地测试解耦任务拆解及沟通详解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
一个oracle+PHP的查询的例子
2006/10/09 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python入门之三角函数atan2()函数详解
2017/11/08 Python
详解python单元测试框架unittest
2018/07/02 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Series和DataFrame使用简单入门
2019/11/13 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
保证金退回承诺函格式
2015/01/21 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
如何拟写通知正文?
2019/04/02 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis