时间戳转字符串
获取当前字符串格式时间
package main import "time" import "fmt" import "strconv" func main() { // 时间戳 - 精确至秒 fmt.Println(time.Now().Unix()) fmt.Println(time.Now().Local().Unix()) // 年月日 fmt.Println(time.Now().Format("2006-01-02")) // 年月日 时分秒 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) //2019-07-31 13:57:52 // 时间戳转字符串 i, err := strconv.ParseInt("1405544146", 10, 64) if err != nil { panic(err) } tm := time.Unix(i, 0) fmt.Println(tm) // 时间戳转为go格式的时间 - int64(1546926630)也可以 - 必须为int64类型 // 直接赋值会报错 timeUnix := 1487780010 - cannot use timestamp (type int) as type int64 in argument to time.Unix var timeUnix int64 = 1562555859 fmt.Println(time.Unix(timeUnix,0)) // 获取年月日时分秒 fmt.Println(time.Now().Year())//年 fmt.Println(time.Now().Month())//月 fmt.Println(time.Now().Day())//日 fmt.Println(time.Now().Hour())//小时 fmt.Println(time.Now().Minute())//分钟 fmt.Println(time.Now().Second())//秒 fmt.Println(time.Now().Nanosecond())//纳秒 // 获取当前时间戳 fmt.Println(time.Now().Unix())//单位秒 fmt.Println(time.Now().UnixNano())//单位纳秒 // 将时间戳格式化 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // str格式化时间转时间戳 t := time.Date(2019, 1, 1, 5, 50, 4, 0, time.Local).Unix() fmt.Println(t) // 时间的计算 // 获取今天0点0时0分的时间戳 currentTime := time.Now() startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location()) fmt.Println(startTime) fmt.Println(startTime.Format("2006-01-02 15:04:05")) // 获取今天23:59:59秒的时间戳 currentTime = time.Now() endTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 23, 59, 59, 0, currentTime.Location()) fmt.Println(endTime) fmt.Println(endTime.Format("2006/01/02 15:04:05")) // 获取1分钟之前的时间 m, _ := time.ParseDuration("-1m") result := currentTime.Add(m) fmt.Println(result) fmt.Println(result.Format("2006/01/02 15:04:05")) // 获取1小时之前的时间 m, _ = time.ParseDuration("-1h") result = currentTime.Add(m) fmt.Println(result) fmt.Println(result.Format("2006/01/02 15:04:05")) // 获取一分钟后的时间 m, _ = time.ParseDuration("1m") result = currentTime.Add(m) fmt.Println(result) fmt.Println(result.Format("2006/01/02 15:04:05")) // 格式化当前时间 fmt.Printf("%d/%d/%d %d:%d",time.Now().Year(),time.Now().Month(),time.Now().Day(),time.Now().Hour(),time.Now().Minute()) // 时间字符串转为时间对象 timeLayout := "2006-01-02 15:04:05" str := "2017-09-12 12:03:40" loc, _ := time.LoadLocation("Local") theTime, _ := time.ParseInLocation(timeLayout, str, loc) //使用模板在对应时区转化为time.time类型 fmt.Println(theTime) //输出:1546926630 // 时间字符串转时间戳 fmt.Println(theTime.Unix()) }
上面的注意理解,其实无论字符串转时间戳还是时间戳转字符串,都是通过首先获取一个对象。time.Now()进而调用其对应的方法
package main import ( "fmt" "time" ) func main() { // 时间字符串转为时间对象 timeLayout := "2006-01-02 15:04:05" str := "2017-06-12 12:03:40" loc, _ := time.LoadLocation("Local") timeObj, _ := time.ParseInLocation(timeLayout, str, loc) //使用模板在对应时区转化为time.time类型 fmt.Println(timeObj) t := time.Date(timeObj.Year(), timeObj.Month()-1, 1, 0, 0, 0, 0, time.Local).Format("2006-01-02") fmt.Println(t) }
//可以获取月份数字 - 如果为1标识本年度首月 fmt.Sprintf("%d", timeObj.Month())
// 获取这个月最后一天 z := time.Date(timeObj.Year(), timeObj.Month()+1, 0, 23, 59, 59, 0, time.Local).Format("2006-01-02 15:04:05") fmt.Println(z)
获取上一个月或者前一条
location, err := time.LoadLocation("America/New_York")//"America/New_York" if err == nil { time.Local = location }
设置时区
time.Now().Format("2006-01-02 15:04:05")
会改变以上的输出(会输出美国纽约时区的时间戳)
location, err := time.LoadLocation("Asia/Shanghai") if err == nil { time.Local = location }