Go之time包日期操作,时间戳与日期相互转换
在Go中,时间操作需要导入time包
获取当前时间
package main import ( "fmt" "time" ) func main() { // 获取当前时间 t := time.Now() fmt.Printf("now=%v\n", t) /* time.Now() 返回类型为time.Time 查看time包下面的Time是结构体,该结构体包含一些方法(只列出其中一些) */ fmt.Printf("year=%v\n", t.Year()) // 年 fmt.Printf("month=%v\n", t.Month()) // 月(英文格式) fmt.Printf("month=%v\n", int(t.Month())) // 月(int强转为数字格式) fmt.Printf("day=%v\n", t.Day()) // 日 fmt.Printf("hour=%v\n", t.Hour()) // 时 fmt.Printf("minute=%v\n", t.Minute()) // 分 fmt.Printf("second=%v\n", t.Second()) // 秒 fmt.Printf("时间戳=%v\n", t.Unix()) // 时间戳(秒) fmt.Printf("时间戳=%v\n", t.UnixNano()) // 时间戳(纳秒) fmt.Printf("周几=%v\n", t.Weekday()) // 周几(英文格式) fmt.Printf("周几=%v\n", int(t.Weekday())) // 周几(int强转为数字格式) } /* 输出: now=2021-11-02 10:03:14.1890599 +0800 CST m=+0.008279001 year=2021 month=November month=11 day=2 hour=10 minute=3 second=14 时间戳=1635818594 时间戳=1635818594189059900 周几=Tuesday 周几=2 */
格式化日期
package main import ( "fmt" "time" ) func main() { t := time.Now() /* 格式化时间使用 T.Format() 其中2006-01-02 15:04:05是格式化的标准格式 可以理解为占位符 年(2006) 月(01/1) 日(02/2) 时(15/3) 分(04/4) 秒(05/5) 每个占位符中间可以使用符号比如"-","/"等,也可以什么都不加直接连接在一起 */ fmt.Printf("%v\n", t.Format("2006-01-02 15:04:05")) fmt.Printf("%v\n", t.Format("2006-01-02")) fmt.Printf("%v\n", t.Format("2006-1-2")) // 占位符月日不带0,格式化后的小于10的月日也不带0 fmt.Printf("%v\n", t.Format("01")) } /* 输出: 2021-11-02 11:22:20 2021-11-02 2021-11-2 11 */
时间戳转日期格式
package main import ( "fmt" "time" ) func main() { /* 1、把时间戳转使用time.Unix()转化为 time.Time 类型时间 2、使用 Format() 方法格式化 */ fmt.Printf("%v\n", time.Unix(1635818594, 0).Format("2006/01/02 15:04:05")) } /* 输出 2021/11/02 10:03:14 */
日期转为时间戳
package main import ( "fmt" "time" ) func main() { /* 1、设置时区 2、time.ParseInLocation() 返回time.Time类型 */ Loc, _ := time.LoadLocation("Asia/Shanghai") // 格式 2006-01-02, 待转化日期 2021-11-02 t1, err := time.ParseInLocation("2006-01-02", "2021-11-02", Loc) if err != nil { fmt.Println(err) } else { fmt.Printf("%v\n", t1.Unix()) } } /* 输出: 1635782400 */
多少时间之前或之后
package main import ( "fmt" "time" ) func main() { /* 使用Time结构体上的Add()方法 Add方法接收 time.Duration类型参数 */ // 一天后 fmt.Printf("%v\n", time.Now().Add(time.Hour*24).Format("2006/01/02 15:03:04")) // 一天前 fmt.Printf("%v\n", time.Now().Add(-time.Hour*24).Format("2006/01/02 15:03:04")) } /* 输出: 2021/11/03 13:01:18 2021/11/01 13:01:18 */
时间戳和时间之间转换
package main import ( "fmt" "log" "time" ) func main(){ //固定时间转换为时间戳 timestr:="2022/11/12 16:54:34" d,err:=time.ParseInLocation("2006/01/02 15:04:05",timestr,time.Local) if err != nil { log.Fatal(err) } //时间戳转换为时间格式 ss:= d.Unix() fmt.Printf("%v",time.Unix(ss,0).Format("2006/01/02 15:04:05")) }