Go-时间处理
重新整理
获取当前时间戳
fmt.Println(time.Now().Unix()) // 当前时间戳 1691844553 fmt.Println(int64(time.Now().Unix())) // 1691845792
获取6天前的时间戳
fmt.Println(time.Now().AddDate(0, 0, -6).Unix()) // 获取6天前的时间戳 1691326153
时间戳转日期
// 格式化成日期 timestamp := int64(1634601600) t := time.Unix(timestamp, 0) // 将时间戳 1634601600 转换为 time.Time 类型 dateStr := t.Format("2006-01-02") fmt.Println("Formatted date:===", dateStr) // Formatted date:=== 2021-10-19 t2 := 1691325101 t2Fotmat := time.Unix(int64(t2), 0).Format("2006-01-02") fmt.Println(t2Fotmat) // 2023-08-06
日期转时间戳
dateStr2 := "2021-10-19" layout := "2006-01-02" t3, err := time.Parse(layout, dateStr2) // 以layout的日期格式输出dateStr2 如果转换匹配不一样 报异常 if err != nil { fmt.Println("Error:", err) // Error: parsing time "2021-10-191": extra text: "1" return } timestamp2 := t3.Unix() fmt.Println("Timestamp:", timestamp2) // 1634601600
获取某个时间戳的当天开始时间和结束时间(0-23)
timestamp3 := 1634601690 // 2021-10-19 08:01:30 t4 := time.Unix(int64(timestamp3), 0) startTime := int(time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t4.Location()).Unix()) endTime := int(time.Date(t.Year(), t.Month(), t.Day(), 23, 59, 59, int(time.Second-time.Nanosecond), t.Location()).Unix()) fmt.Println("startTime===", startTime) // startTime=== 1634572800 转成日期:2021-10-19 00:00:00 fmt.Println("endTime===", endTime) // endTime=== 1634659199 转成日期: 2021-10-19 23:59:59
TODO
时间获取
package main
import (
"fmt"
"time"
)
func main() {
timeObj :=time.Now() //返回的是个对象
fmt.Println(timeObj) //2021-03-25 22:14:57.3459874 +0800 CST m=+0.003004101
// 过去年-月-日 时-分-秒的格式
year := timeObj.Year()
fmt.Println(year) //2021
month := timeObj.Month()
fmt.Println(month) // March
day := timeObj.Day()
fmt.Println(day) //25
hour := timeObj.Hour()
fmt.Println(hour) //22
minute := timeObj.Minute()
fmt.Println(minute) //18
second := timeObj.Second()
fmt.Println(second) //4
fmt.Printf("%d-%d-%d %d:%d:%d\n", year, month, day, hour, minute, second) //2021-3-25 22:21:37
fmt.Printf("%d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second) //2021-03-25 22:21:37
//注意:%02d 中的 2 表示宽度,如果整数不够 2 列就补上 0
}
自定义格式
go中没有像PHP "Y-m-d"这样格式全部使用数字代表
package main
import (
"fmt"
"time"
)
/*
时间类型有一个自带的方法Format进行格式化,
需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S
而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4)
2006 年
01 月
02 日
03 时 12小时制 写成:15 表示 24小时制
04 分
05 秒
*/
func main() {
// timeObj := time.Now()
// var str = timeObj.Format("2006-01-02 03:04:05")
// fmt.Println(str) //2020-04-26 05:44:24
//12小时制
// timeObj := time.Now()
// var str = timeObj.Format("2006/01/02 03:04:05")
// fmt.Println(str) //2020/04/26 05:44:47
// 24小时制
timeObj := time.Now()
var str = timeObj.Format("2006/01/02 15:04:05")
fmt.Println(str) // 2020/04/26 17:48:53
}
时间戳&日期格式转换
package main
import (
"fmt"
"time"
)
func main() {
// 1.获取当前时间戳 (毫秒)
timeObj := time.Now()
sjc := timeObj.Unix()
fmt.Println(sjc) // 1616759478
//2.时间戳转换为日期格式 注意int64转换
timeObj2 := time.Unix(int64(sjc), 0)
dateStr := timeObj2.Format("2006-01-02 15:04:05")
fmt.Println(dateStr) // 2021-03-26 19:51:18
//3.日期格式转为时间戳
str := "2021-03-26 19:51:18"
tmp := "2006-01-02 15:04:05" // 需要和被转换的日期字符串格式一致
timeObj3, _ := time.ParseInLocation(tmp, str, time.Local)
fmt.Println(timeObj3.Unix()) // 1616759478
}

浙公网安备 33010602011771号