在Go语言中与时间打交道一般通过time
包。要使用相关功能需要导入该包:
import "time"
currentTime := time.Now()
time.Now()
返回当前时间对象(time.Time
),通过这个时间对象可以进行进一步的处理,比如输出时间戳等。
currentTime.Unix()
// 1714362467
有时我们需要知道两个时间段之间的差来判断耗时多久
最简单的方法是计算两个时间段之间的时间戳差
currentTime := time.Now()
// 耗时操作开始
time.Sleep(3 * time.Second)
// 耗时操作结束
fmt.Println(time.Now().Unix() - currentTime.Unix())
Go提供了一个专门的数据集Duration
来表示两个时间的差,并使用Sub()
来获得该Duration
time.Duration
提供了如下方法:
currentTime := time.Now()
// 耗时操作开始
time.Sleep(3 * time.Second)
// 耗时操作结束
endTime := time.Now()
diffTime := endTime.Sub(currentTime)
fmt.Println(diffTime.Seconds())
Time包还提供了Since
方法来简化计算两个时间的差:
currentTime := time.Now()
fmt.Println(time.Since(currentTime).Seconds())
还可以通过Time.Add()
来增加指定Duration
t := time.Now().Add(3 * time.Second)
fmt.Println(t.Unix())
首先需要定义时间的格式,与其他语言不同的是,Go语言的格式化语句有点特殊
const (
Date = "2006-01-02"
DateTime = "2006-01-02 15:04:05"
)
可以通过Time.Format()
方法来格式化时间戳
currentTime := time.Now()
dateStr := currentTime.Format(Date)
dateTimeStr := currentTime.Format(DateTime)
fmt.Println(dateStr, dateTimeStr)
字符串时间转换为时间戳则需要time包提供的Time.Parse()
方法
date, err := time.Parse(Date, dateStr)
if err != nil {
fmt.Println("wrong date format")
}
fmt.Println(date.Unix())
datetime, err := time.Parse(DateTime, dateTimeStr)
if err != nil {
fmt.Println("wrong date format")
}
fmt.Println(datetime.Unix())
在服务器上,默认时区可能不是你所在地区的时区,在Go中可以通过指定时区来获得对应时区的时间
time包提供了Time.Location()
方法来获取指定时区,如果参数为""
或"UTC"
,则返回UTC。如果参数为"local"
,则返回当前系统所在的时区。还可提供指定地区的时区获取对应时区的时间,如"Asia/Shanghai"
, "America/Los_Angeles"
。
location, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println("Wrong local")
}
fmt.Println(location)
再通过time.ParseInLocation()
方法来转换成指定时区的time.Time
locationDateTime, err := time.ParseInLocation(DateTime, dateTimeStr, location)
if err != nil {
fmt.Println("someting going wrong")
}
fmt.Println(locationDateTime.Unix())
基于Nginx+Supervisord+uWSGI+Django1.11.1+Python3.6.5构建