Go语言进阶之路(九):时间处理和格式化输出

数据库的日期和时间

日期和时间是任何语言都必须处理好的事情。我们知道,在MySQL中,日期部分有date类型,时间部分有time类型,日期和时间都包含的类型有datetime类型(时间戳有timestamp类型)。比如,“2020-05-18 08:53:34.083”的日期部分就是“2020-05-18”,时间部分就是“08:53:34.083”。

语言对时间的诉求

在任何语言的使用过程中,我们无非是以下几点诉求:

  • 时间能按照我们想要的格式化输出
  • 时间能从字符串被解析成语言的内置时间类型
  • 时间能加减、互相比较
  • 能轻松计算一段代码的运行时间
  • 能与数据库时间轻松地相互转换
  • 支持时区设置,能轻松转换成某一地区的时间

Go语言中的时间能满足这上面的所有需求。

Go语言内置时间库

Go语言中的时间类型在内置的time库中,为Time类型。看一下Time的定义,wall是秒数,ext是纳秒,loc表示时区。这几个属性是私有属性,我们不必太关注。

type Time struct {
    wall uint64
    ext  int64
    loc *Location
}

新建Time实例可以使用time.Parse和time.ParseInLocation方法,或者使用time.Now()获取当前机器的时间。

 

还有Duration类型,表示两个时间之间的间隔,精确到纳秒,最大能表示大约290年的时间间隔。

type Duration int64

新建Duration实例可以使用time.ParseDuration方法或者直接获取Duration常量比如time.Second或者time.Minute等。

 

还有Timer类型,表示计时器。Timer中含有通道C,如果计时器不是使用AfterFunc方法创建的,则,当计时器到时间了,当前时间就会被传到通道C中;如果计时器是AfterFunc创建的,则计时器到时间了,会调用AfterFunc传入的f那个函数。

// The Timer type represents a single event.
// When the Timer expires, the current time will be sent on C,
// unless the Timer was created by AfterFunc.
// A Timer must be created with NewTimer or AfterFunc.
type Timer struct {
  C <-chan Time
  r runtimeTimer
}<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值