Go 时间和日期函数详解(1)| 学习笔记

简介: 快速学习 Go 时间和日期函数详解(1)

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: Go 时间和日期函数详解(1)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9618


Go 时间和日期函数详解(1)

基本内容:

一、 时间和日期相关函数,需要导入 time 包

二、 time.Time 类型,用于表示时间

三、 获取到当前时间的方法: now := time.Now() // now 的类型就是 time.Time

四、 格式化日期时间

 

说明

在编程中,程序员会经常使用到日期相关的函数,比如:统计某段代码执行花费的时间等等。时间和日期的相关函数,用法也非常普遍。

 

一.时间和日期相关函数,需要导入 time 包

1、在 golang 里面,数据和日期的相关函数都放在 time 包中,time 包提供了时间的显示和测量用的函数。日历的计算采用的是公历,时间相关的函数都放在 time 包中。

image.png 

二. time.Time 类型,用于表示时间

1、在 golang 中有个类型叫 time.Time 类型,time 包里定义了一个常量 Time,Time 本身也是一种数据类型。

2、案例代码:

package main

import (

"fmt"

"time"

)

func main() {

//看看日期和时间相关函数和方法使用//1.获取当前时间

now := time.Now()

fmt.Printf("now=%v now type=%T", now,now)

}

3、运行结果:

image.png

4、代码分析:

引入 fmt 包和 time 包,写一个主函数,看看日期和时间相关函数和方法使用,获取当前时间,用一个 now 来获取 now := time.Now() ,先看 now 的值是多少,再看 now 的 type 类型是什么。运行后可以看到时间,并且有时区还有毫秒数,可以看到 now 的类型是 time.Time ,这个类型提供了一些相关的方法,可以用方法来获取更详细的信息。现在得到 now 并不可以很清楚的看出时间,下面一点是对它进行一个再处理。

 

三.获取到当前时间的方法: now := time.Now() // now 的类型就是 time.Time

1、案例代码:

package main

import (

"fmt"

"time"

)

func main() {

//2.通过 now 可以获取到年月日,时分秒

fmt.Printf("年=%v\n, now.Year())

fmt.Printf("月=%v\n", now.Month())

fmt.Printf("日=%vln", int(now.Month()))

fmt.Printf("时=%v\n", now.Hour())

fmt.Printf("分=%v\n", now.Minute())

fmt.Printf("秒=%v\n", now.Second())

}

2、输出结果:

年=2018

月=5

日=29

时=16

分=24

秒=58

3、代码分析:

通过 now 可以获取到年月日,时分秒,通过查 go 官方文档手册,点击 Now,Now 返回的是当前本地时间,返回的是 Time 类型,Time 是一个结构体,这个 Time 结构体中有很多方法,比如 func(Time)Unix,func(Time)UnixNano,Year、Month、Day。Year 是返回时间点对应的年份,Month 返回时间点对应的月份。获取年的方法 fmt.Printf("年=%v\n, now.Year()),获取分时秒的方法也一样,将里面的年改变成需要的时间就可以,运行之后,得到了年月日时分秒。但是返回的月份是英文的,如果把英文的月份改成中文的,需要添加一个 int,fmt.Printf("日=%vln", int(now.Month())) 转完就可以。

 

四.格式化日期时间

在输出的时候,往往会对时间格式化,可以清楚的看出当时的时间。

1、方式1

(1) 方式1:就是使用 Printf 或者 SPrintf

SPrintf 和 Printf 的区别在于 SPrintf 是字符串输出,而 Printf 是直接输出。

(2) 代码案例:

package main

import (

"fmt"

"time"

)

func main() {

//格式化日期时间

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\n", datestr)

}

(3) 结果输出:

当前年月日 2018-5-29 16:35:25

datestr= 当前年月日 2018-5-29-16:35:25

(4) 代码解析:

代码过长允许换行,但换行时要有逗号。当前年月日是按格式化输出的,每个值一一对应,输出是当前年月日 2018-5-29 16:35:25。如果不喜欢用——来表示间隔,也可以用空格来表示。用 Sprintf 可以把字符串本身拿到,这是格式化后把字符串返回给变量,可以对变量做相应的处理,比如保存在数据库中或是做其它处理。

2.方式2

(1) 使用 time.Format ( )方法完成:

now 是 time 类型,里面有个 Format 方法,直接写字符串 2006/01/02 15:04:05 是固定的写法,这个时间据说是 go 语言设计者最初想诞生 go 语言的时间。Time中有 Format 方法。

(2) 代码案例:

package main

import (

"fmt"

"time"

)

func main() {

//格式化日期时间的第二种方式

fmt.Printf(now.Format( " 2006/01/02 15:04:05"))

fmt.Println()

fmt.Printf(now. Format( "2006-01-02"))

fmt.Println()

fmt.Printf(now.Format("15:04:05"))

fmt.Println()

(3) 输出结果:

2018/05/29 16:35:25

2018-05-29

16:35:25

(4) 对上面代码的说明:

fmt.Printf(now. Format( "2006-01-02"))输出的只是年月日,fmt.Printf(now.Format("15:04:05"))输出的是时分秒,

fmt.Printf(now.Format( " 2006/01/02 15:04:05"))里面的/是可以换成别的符号,只要数字不乱改。下划线,中划线都可以,但是数字不能改变,如果改变了数字,结果会错误。

如果只想输出月份 fmt.Printf(now.Format("01"))返回的就是月份,只想输出年,就把 01 改成 2006。

"2006/01/02 15:04:05”这个字符串的各个数字是固定的,必须是这样写。

"2006/01/02 15:04:05”这个字符串各个数字可以自由的组合,这样可以按程序需求来返回时间和日期。

相关文章
|
3月前
|
监控 安全 Java
Go语言学习笔记(一)
Go语言学习笔记(一)
106 1
|
2月前
|
存储 分布式计算 算法
GO学习笔记之表达式
GO学习笔记之表达式
33 1
|
2月前
|
存储 编译器 Go
GO语言学习笔记
GO语言学习笔记
23 1
|
7月前
|
自然语言处理 前端开发 Java
Go 学习笔记-Go 编译器简介
Go 学习笔记-Go 编译器简介
43 0
|
7月前
|
自然语言处理 算法 Java
Go学习笔记-Go编译器简介
Go学习笔记-Go编译器简介
51 0
|
7月前
|
存储 Go
Go学习笔记-Go 浮点数设计原理
Go学习笔记-Go 浮点数设计原理
57 0
|
7月前
|
Go 自然语言处理 编译器
Go 学习笔记-Go 词法解析
Go 学习笔记-Go 词法解析
50 0
Go 学习笔记-Go 词法解析
|
7月前
|
Go iOS开发 MacOS
Go学习笔记-代码调试工具 dlv
Go学习笔记-代码调试工具 dlv
200 1
Go学习笔记-代码调试工具 dlv
|
7月前
|
编译器 Go
Go学习笔记-defer、panic、recover分析
Go学习笔记-defer、panic、recover分析
43 1
Go学习笔记-defer、panic、recover分析
|
7月前
|
存储 安全 Linux
Go语言学习笔记-进程和线程
Go语言学习笔记-进程和线程
36 0
Go语言学习笔记-进程和线程