15、时间和日期相关函数
- 需要导入time包…
- 获取当前时间 time.Now()
- 时间信息now.Year() Month Day Hour Minute Second
- 格式化日期时间 方法1:fmt.Printf(“当前年月日 %d-%d-%d %d:%d:%d \n”, now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(),
now.Second())
方法2:fmt.Printf(now.Format(“2006/01/02 15:04:05”)) 固定数字位置,如01代表月份,04代表分钟 - 时间的常量 :在程序中可以获取指定单位的时间
const (
Hour Minute Second // 1000millisecond Millisecond //毫秒 1000Microsecond Microsecond //微秒 1000*Nanosecond Nanosecond
//纳秒
) - time的Unix 和 UnixNano的使用:返回1970年7月1号到现在的秒、纳秒数:now.Unix(), now.UnixNano()
package main
import (
"fmt"
"strconv"
"time"
)
func test03() {
str := ""
for i := 0; i < 100000; i++ {
str += "aaa" + strconv.Itoa(i)
}
}
func main() {
//看看日期和时间相关函数和方法使用
//1、获取当前时间
now := time.Now()
fmt.Printf("now=%v now type=%T\n", now, now)
fmt.Printf("年=%v\n", now.Year())
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())
//格式化日期时间
fmt.Printf("当前年月日 %d-%d-%d %d:%d:%d \n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
//也可以格式化后赋值给变量
datastr := fmt.Sprintf("当前年月日 %d-%d-%d %d:%d:%d \n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
fmt.Printf("datastr=%v\n", datastr)
//2006/01/02 15:04:05 这串数字必须固定,顺序、样式可以调整
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()
//Unix和UnixNano的使用
fmt.Println(now.Unix(), now.UnixNano())
//计算一个函数执行耗时
//start := time.Now().Unix()
//test03()
//end := time.Now().Unix()
//fmt.Println(start, end, end-start)
//取当天0点和昨天0点
//20190626152337870
//20211207000000
tm1 := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Now().Location())
tm2 := tm1.AddDate(0, 0, -1)
fmt.Println(tm1.Format("20060102150405"), tm2.Format("20060102150405"))
}
16、内置函数
len:获取长度 new:用来分配内存,主要用来分配值类型,比如int、float32、struct,返回的是指针 make:用来分配内存,主要用来分配引用类型,比如chan、map、slice
package main
import "fmt"
func main() {
num1 := 100
//int类型、地址
fmt.Printf("num1的类型%T,num1的值%v,num1的地址%v\n", num1, num1, &num1)
//指针类型、地址,默认是0
num2 := new(int)
fmt.Printf("num2的类型%T,num2的值%v,num2的地址%v,*num2的值%v\n", num2, num2, &num2, *num2)
//指针赋值,操作的是同一个内存地址,值改变了
*num2 = 100
fmt.Printf("num2的类型%T,num2的值%v,num2的地址%v,*num2的值%v\n", num2, num2, &num2, *num2)
}
17、错误处理
1)默认情况下,发生panic错误后,程序会退出 2)一般我们希望发生错误后,能捕获到错误,同时代码可以继续执行,因此需要错误处理机制:defer、recover 3)自定义错误,使用errors.New和panic内置函数
package main
import (
"errors"
"fmt"
)
func test() {
//使用defer+recover捕获和处理异常
defer func() {
err := recover() //内置函数,可以捕获异常
if err != nil { //如果有错误
fmt.Println("err=", err)
}
}()
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res=", res)
}
//函数读取配置文件init.conf信息,如果文件名错误,抛出一个自定义错误
func readConf(name string) (err error) {
if name == "config.ini" {
return nil
} else {
return errors.New("读取配置文件错误.")
}
}
func test02() {
err := readConf("xxx.ini")
if err != nil {
//如果发生错误,输出错误及终止程序
panic(err)
}
fmt.Println("test02后面的代码111")
}
func main() {
test()
// //加入错误处理后,后面的代码可以正常执行
fmt.Println("后面的代码")
//test02()
//fmt.Println("test02后面的代码222")
}
本文介绍Go语言中时间和日期相关函数的使用方法,包括获取当前时间、格式化日期时间、使用Unix时间戳等。此外还介绍了Go语言中的错误处理机制,包括如何使用defer和recover来捕获并处理运行时异常。
566

被折叠的 条评论
为什么被折叠?



