一文搞懂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
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
解决Go gorm踩过的坑
Apr 30 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
Go 语言结构实例分析
Jul 04 Golang
使用GO语言实现Mysql数据库CURD的简单示例
Aug 07 Golang
深入理解go slice结构
Sep 15 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
如何解决goland,idea全局搜索快捷键失效问题
Apr 03 Golang
Go gRPC进阶教程gRPC转换HTTP
Jun 16 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
mysql limit查询优化分析
2008/11/12 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
Python实现的特征提取操作示例
2018/12/03 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
电脑销售顾问自荐信
2014/01/29 职场文书
网上卖盒饭创业计划书范文
2014/02/07 职场文书
信息管理专业自荐书
2014/06/05 职场文书
会计学毕业生求职信
2014/06/25 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
汽车销售合同文本
2019/08/08 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android