开发者学堂课程【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 包中。
二. 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、运行结果:
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”这个字符串各个数字可以自由的组合,这样可以按程序需求来返回时间和日期。