August Rush

一个还在努力成长的小火汁!

游龙当归海,海不迎我自来也。

We create our own demons.

You can reach me at augustrush0923@gmail.com
Go语言基础-时间相关函数
发布:2024年04月29日 | 作者:augustrush | 阅读量: 840

Go语言基础-time

在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提供了如下方法:

  • String() string
  • Nanoseconds() int64
  • Microseconds() int64
  • Milliseconds() int64
  • Seconds() float64
  • Minutes() float64
  • Hours() float64
  • Truncate(m time.Duration) time.Duration
  • Round(m time.Duration) time.Duration
  • Abs() 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构建

京ICP备20007446号-1 & 豫公网安备 41100202000460号

网站地图 & RSS | Feed