golang如何获取当前时间的前几天
在golang中,我们可以使用time包来获取和操作时间。时间的表示方式有很多,例如Unix时间戳、字符串、建立一个time.Time结构体等。下面我们就来讲解如何获取当前时间的前几天。
方法1:使用Add方法获取
在golang中, time.Time类型提供了Add()方法,可以进行时间的加减法操作。我们可以使用time.Now()获取到当前时间,然后使用Add方法来获取当前时间的前几天。
示例代码如下:
package main
import (
"fmt"
"time"
)
func main() {
//获取当前时间
now := time.Now()
//获取前1天时间
yesterday := now.AddDate(0, 0, -1)
//获取前7天时间
lastWeek := now.AddDate(0, 0, -7)
//获取前30天时间
lastMonth := now.AddDate(0, -1, 0)
fmt.Println(now)
fmt.Println(yesterday)
fmt.Println(lastWeek)
fmt.Println(lastMonth)
}
运行结果:
2021-10-27 11:55:58.7148 +0800 CST m=+0.001996901 2021-10-26 11:55:58.7148 +0800 CST 2021-10-20 11:55:58.7148 +0800 CST 2021-09-27 11:55:58.7148 +0800 CST
上述代码中,我们获取了当前时间now,然后调用AddDate()方法来获取前1天时间、前7天时间、前30天时间等,最后将结果打印出来。其中AddDate()方法的 个参数表示年份增减,第二个参数表示月份增减,第三个参数表示天数增减。如果想获取更多年、月或日的差距,可以在 个参数和第二个参数中传入更大的数字即可。
需要注意的是,AddDate()方法返回的是time.Time类型。如果需要将其转化成字符串格式或Unix时间戳格式,可以使用time.Time对象的Format()方法或Unix()方法,如下所示:
//将前1天时间转化成字符串格式
yesterdayStr := yesterday.Format("2006-01-02 15:04:05")
fmt.Println(yesterdayStr)
//将前1天时间转化成Unix时间戳格式
yesterdayUnix := yesterday.Unix()
fmt.Println(yesterdayUnix)
方法2:使用Sub方法获取
在golang中, time.Time类型也提供了Sub()方法,可以进行时间的减法操作。我们可以将当前时间减去时间差来获取前几天的时间。
示例代码如下:
package main
import (
"fmt"
"time"
)
func main() {
//获取当前时间
now := time.Now()
//获取前1天时间
yesterday := now.Add(-1 * 24 * time.Hour)
//获取前7天时间
lastWeek := now.Add(-7 * 24 * time.Hour)
//获取前30天时间
lastMonth := now.Add(-30 * 24 * time.Hour)
fmt.Println(now)
fmt.Println(yesterday)
fmt.Println(lastWeek)
fmt.Println(lastMonth)
}
运行结果与方法1相同,此处不进行演示。
上述代码中,我们使用now.Add(-1 * 24 * time.Hour)的方式获取前1天时间,这里的-1表示向前推一天,24表示一天的小时数,time.Hour表示一个小时的时间。同理,我们可以通过增加或减少24 * x * time.Hour来获取前x天或后x天的日期。需要注意的是,time.Duration类型的常量time.Hour表示的是1小时,而不是3600秒。
方法3:使用Unix时间戳计算
在golang中,我们还可以使用Unix时间戳来进行时间的计算。Unix时间戳是指1970年1月1日00:00:00到某一时刻的秒数。我们可以获取当前时间的Unix时间戳,然后通过减去指定的秒数来得到前几天的时间戳。最后再将时间戳转换为time.Time类型,即可得到前几天的时间。
示例代码如下:
package main
import (
"fmt"
"time"
)
func main() {
//获取当前时间的Unix时间戳
nowUnix := time.Now().Unix()
//获取前1天时间的Unix时间戳
yesterdayUnix := nowUnix - 24*60*60
//获取前7天时间的Unix时间戳
lastWeekUnix := nowUnix - 7*24*60*60
//获取前30天时间的Unix时间戳
lastMonthUnix := nowUnix - 30*24*60*60
//将Unix时间戳转化为time.Time类型
yesterday := time.Unix(yesterdayUnix, 0)
lastWeek := time.Unix(lastWeekUnix, 0)
lastMonth := time.Unix(lastMonthUnix, 0)
fmt.Println(nowUnix)
fmt.Println(yesterday)
fmt.Println(lastWeek)
fmt.Println(lastMonth)
}
运行结果与方法1相同,此处不进行演示。
上述代码中,我们使用nowUnix - 24*60*60来获取前1天时间的Unix时间戳,其中24表示一天的小时数,60表示一小时的分钟数,60表示一分钟的秒数,因此24*60*60表示一天的秒数。需要注意的是,time.Unix()方法的 个参数是Unix时间戳,第二个参数是纳秒数,如果为0则表示忽略纳秒。
