一文搞懂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 如何用反射reflect操作结构体
Apr 28 Golang
解决Golang中goroutine执行速度的问题
May 02 Golang
go web 预防跨站脚本的实现方式
Jun 11 Golang
Golang表示枚举类型的详细讲解
Sep 04 Golang
Golang原生rpc(rpc服务端源码解读)
Apr 07 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
GO语言字符串处理函数之处理Strings包
Apr 14 Golang
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 Golang
Golang日志包的使用
Apr 20 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 Golang
Go gorilla/sessions库安装使用
Aug 14 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
python分析apache访问日志脚本分享
2015/02/26 Python
python图片验证码生成代码
2016/07/02 Python
python删除过期log文件操作实例解析
2018/01/31 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
类的返射机制中的包及核心类
2016/09/12 面试题
幼儿园课题方案
2014/06/09 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
五年级小学生评语
2014/12/26 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书