package main import ( "fmt" "time" ) // 重要提醒:Go并没有全局设置时区的功能,所以每次调用time包的函数必须调用In()设置时区或传入时区参数。 var location, _ = time.LoadLocation("Asia/Shanghai") // GetTimeStamp // @description 获取当前时间戳(秒级) // @return int64 时间戳(秒级) func GetTimeStamp() int64 { return time.Now().In(location).Unix() } // GetDateTime // @description 获取当前时间的日期时间字符串 // @param format string 日期时间字符串格式:示例值:"2006-01-02 15:04:05" // @return string 日期时间字符串 func GetDateTime(format string) string { return time.Unix(time.Now().In(location).Unix(), 0).In(location).Format(format) } // StringToTime // @description 日期时间字符串转时间戳 // @param dateTime string 日期时间字符串 // @return int64 时间戳 func StringToTime(dateTime string) int64 { t, _ := time.ParseInLocation(time.DateTime, dateTime, location) return t.Unix() } // TimeToString // @description 时间戳转日期时间字符串 // @param timeStamp int64 时间戳 // @return string 日期时间字符串 func TimeToString(timeStamp int64) string { return time.Unix(timeStamp, 0).In(location).Format(time.DateTime) } func main() { fmt.Printf("当前时间戳(秒,second) :%v \n", time.Now().In(location).Unix()) // 10位数字 fmt.Printf("当前时间戳(毫秒,millisecond):%v \n", time.Now().In(location).UnixMilli()) // 13位数字 fmt.Printf("当前时间戳(微秒,microsecond):%v \n", time.Now().In(location).UnixMicro()) // 16位数字 fmt.Printf("当前时间戳(纳秒,nanosecond) :%v \n", time.Now().In(location).UnixNano()) // 19位数字 fmt.Printf("当前年:%v \n", time.Now().In(location).Year()) fmt.Printf("当前月:%v \n", time.Now().In(location).Month()) // 注:不是数字,而是月份英文,示例:December fmt.Printf("当前日:%v \n", time.Now().In(location).Day()) fmt.Printf("当前时:%v \n", time.Now().In(location).Hour()) fmt.Printf("当前分:%v \n", time.Now().In(location).Minute()) fmt.Printf("当前秒:%v \n", time.Now().In(location).Second()) fmt.Printf("当前纳秒:%v \n", time.Now().In(location).Nanosecond()) // 注:纳秒就是纳秒级时间戳的最后9位数字 fmt.Printf("当前星期:%v \n", time.Now().In(location).Weekday()) // 注:不是数字,而是星期几英文,示例:Saturday fmt.Printf("当前时间戳(秒):%v \n", GetTimeStamp()) fmt.Printf("当前日期时间:%v \n", GetDateTime(time.DateTime)) fmt.Printf("3天前的日期时间:%v \n", time.Now().In(location).AddDate(0, 0, -3).Format(time.DateTime)) fmt.Printf("3天后的日期时间:%v \n", time.Now().In(location).AddDate(0, 0, 3).Format(time.DateTime)) // 时间戳转日期时间字符串和Time对象 timeStamp := int64(1218154088) dateTime := TimeToString(timeStamp) timeObject := time.Unix(timeStamp, 0) fmt.Printf("%v <=> %v \n", timeStamp, dateTime) // 1218154088 <=> 2008-08-08 08:08:08 fmt.Printf("%v <=> %v \n", timeStamp, timeObject) // 1218154088 <=> 2008-08-08 08:08:08 +0800 CST // 日期时间字符串转时间戳 dateTime = "2008-08-08 08:08:08" timeStamp = StringToTime(dateTime) fmt.Printf("%v <=> %v \n", dateTime, timeStamp) // 2008-08-08 08:08:08 <=> 1218154088 } // ========== 总结 ==========// // 1、Go语言的日期时间格式字符串不是“yyyy-MM-dd HH:mm:ss”的形式,而是“2006-01-02 15:04:05”这种形式,虽然看起有点奇怪,但 // 在Go语言中就是这么用的。开发者并不需要特意记住这串字符串,Go语言内置了常用格式字符串的常量: // time.DateTime === "2006-01-02 15:04:05" // time.DateOnly === "2006-01-02"
Copyright © 2024 码农人生. All Rights Reserved