2020.09.09
1558
go中时间可分为时间点(Time)与时间段(Duration),时间的操作应用主要在于time 包的使用。
时间点(Time)
go 针对不同的参数类型提供了以下初始化的方式
//当前时间
fmt.Println(time.Now())
//使用parse 格式为标准时间
time.Parse("2016-01-02 15:04:05", "2018-04-23 12:24:51")
// layout已带时区时可直接用Parse)
time.ParseInLocation("2006-01-02 15:04:05", "2017-05-11 14:06:06", time.Local)
//时间戳
time.Unix(1e9, 0)
//
time.Date(2018, 1, 2, 15, 30, 10, 0, time.Local)
//ime 当前时间对应指定时区的时间
loc, _ := time.LoadLocation("America/Los_Angeles")
fmt.Println(time.Now().In(loc))
获取到时间点之后,需要转换成我们需要的格式,也就是格式化:
格式化为字符串
格式化为字符串我们需要使用 time.Format 方法来转换成我们想要的格式
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(time.Now().Format(time.UnixDate))
Format 函数中可以指定你想使用的格式,同时 time 包中也给了一些我们常用的格式
const (
ANSIC = "Mon Jan _2 15:04:05 2006"
UnixDate = "Mon Jan _2 15:04:05 MST 2006"
RubyDate = "Mon Jan 02 15:04:05 -0700 2006"
RFC822 = "02 Jan 06 15:04 MST"
RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
RFC3339 = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
Kitchen = "3:04PM"
// Handy time stamps.
Stamp = "Jan _2 15:04:05"
StampMilli = "Jan _2 15:04:05.000"
StampMicro = "Jan _2 15:04:05.000000"
StampNano = "Jan _2 15:04:05.000000000"
)
需要注意的是:galang 中指定的特定时间格式为 "2006-01-02 15:04:05 -0700 MST"
时间戳
func (t Time) Unix() int64
func (t Time) UnixNano() int64
fmt.Println(time.Now().Unix())
// 获取指定日期的时间戳
dt, _ := time.Parse("2016-01-02 15:04:05", "2018-04-23 12:24:51")
fmt.Println(dt.Unix())
fmt.Println(time.Date(2018, 1,2,15,30,10,0, time.Local).Unix())
时间运算
// func Sleep(d Duration) 休眠多少时间,休眠时处于阻塞状态,后续程序无法执行
time.Sleep(time.Duration(10) * time.Second)
// func After(d Duration) <-chan Time 非阻塞,可用于延迟
time.After(time.Duration(10) * time.Second)
// func Since(t Time) Duration 两个时间点的间隔
start := time.Now()
fmt.Println(time.Since(start)) // 等价于 Now().Sub(t), 可用来计算一段业务的消耗时间
func Until(t Time) Duration // 等价于 t.Sub(Now()),t与当前时间的间隔
// func (t Time) Add(d Duration) Time
fmt.Println(dt.Add(time.Duration(10) * time.Second)) // 加
func (t Time) Sub(u Time) Duration // 减
// func (t Time) AddDate(years int, months int, days int) Time
fmt.Println(dt.AddDate(1, 1, 1))
// func (t Time) Before(u Time) bool
// func (t Time) After(u Time) bool
// func (t Time) Equal(u Time) bool 比较时间点时尽量使用Equal函数
时区转换
// time.Local 用来表示当前服务器时区
// 自定义地区时间
secondsEastOfUTC := int((8 * time.Hour).Seconds())
beijing := time.FixedZone("Beijing Time", secondsEastOfUTC)
fmt.Println(time.Date(2018,1,2,0,0,0,0, beijing)) // 2018-01-02 00:00:00 +0800 Beijing Time
// 当前时间转为指定时区时间
fmt.Println(time.Now().In(beijing))
// 指定时间转换成指定时区对应的时间
dt, err := time.ParseInLocation("2006-01-02 15:04:05", "2017-05-11 14:06:06", time.Local)
// 当前时间在零时区年月日 时分秒 时区
year, mon, day := time.Now().UTC().Date() // 2018 April 24
hour, min, sec := time.Now().UTC().Clock() // 3 47 15
zone, _ := time.Now().UTC().Zone() // UTC
Ticker类型
Ticker 类型包含一个 channel,有时我们会遇到每隔一段时间执行的业务(比如设置心跳时间等),就可以用它来处理,这是一个重复的过程
// 无法取消
tick := time.Tick(1 * time.Minute)
for _ = range tick {
// do something
}
// 可通过调用ticker.Stop取消
ticker := time.NewTicker(1 * time.Minute)
for _ = range tick {
// do something
}
参考:https://blog.csdn.net/wschq/article/details/80114036
2020.01.16
1594
MDN 中对其的定义如下: Background 是一种 CSS 简写属性,一次性定义了所有的背景属性,包括 color, image, origin 还有 size, repeat 方式等等。
2021.03.03
2160
概述 mac下载安装了virtualbox 然后正常设置了iso镜像,启动时报错Kernel driver not installed (rc=-1908)。