首先
【时间戳】
定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的。这点有利于线上和客户端分布式应用统一追踪时间信息。但是不同的时区,当前时间戳对应的当前时间是不同的。
【ParseInLocation】字符串转时间类型时要使用ParseInLocation而不是Parse
ParseInLocation类似Parse但有两个重要的不同之处。第一,当缺少时区信息时,Parse将时间解释为UTC时间,而ParseInLocation将返回值的Location设置为loc;第二,当时间字符串提供了时区偏移量信息时,Parse会尝试去匹配本地时区,而ParseInLocation会去匹配loc。
loc, _ := time.LoadLocation("Europe/Berlin")
const longForm = "Jan 2, 2006 at 3:04pm (MST)"
t, _ := time.ParseInLocation(longForm, "Jul 9, 2012 at 5:02am (CEST)", loc)
fmt.Println(t)
// Note: without explicit zone, returns time in given location.
const shortForm = "2006-Jan-02"
t, _ = time.ParseInLocation(shortForm, "2012-Jul-09", loc)
fmt.Println(t)
【Unix】
Unix创建一个本地时间,对应sec和nsec表示的Unix时间(从January 1, 1970 UTC至该时间的秒数和纳秒数)。nsec的值在[0, 999999999]范围外是合法的。
timeV := time.Unix(timestampV, 0)
Unix的一个坑:
type S1 struct {
F1 time.Time
}
func main() {
s1 := &S1{} // F1 = 0001-01-01 00:00:00 +0000
s1Ts := s1.F1.Unix() // -62135596800 不符合预期
s2 := time.Unix(0, 0)
s2Ts := s2.Unix() // 0 符合预期
}
time类型 和 时间戳 的转换
timestamp := time.Now().Unix() //timestamp为时间戳类型
tm := time.Unix(timestamp, 0) //tm为Time类型
时间戳或time类型 转 字符串(格式化)
tm := time.Now() //tm为Time类型
timestamp := time.Now().Unix() //timestamp为时间戳类型
time.Now().String() //没有格式化
fmt.Println(tm.Format("2006-01-02 03:04:05 PM")) //格式化
fmt.Println(tm.Format("02/01/2006 15:04:05 PM")) //24小时制
也可以直接输出 fmt.Println(time.Now()) output:2017-02-27 01:20:00.567634365 +0800 CST
指定时间的time类型 time.Date(2017, 02, 27, 20, 20, 20, 20, time.Local)
字符串 转 time类型或时间戳
x := "2017-02-27 17:30:20"
p, _ := time.Parse("2006-01-02 15:04:05", x) //p为time类型
p.Unix() //p.Unix()为时间戳类型
time ticker
func main() {
ticker := time.NewTicker(10 * time.Second)
for i := 0; i < 10; i++ {
time := <-ticker.C
fmt.Println(time.String())
}
}
输出:
2015-08-24 16:22:23.590564088 +0800 CST
2015-08-24 16:22:33.591194618 +0800 CST
2015-08-24 16:22:43.587720967 +0800 CST
2015-08-24 16:22:53.590231413 +0800 CST
2015-08-24 16:23:03.591164202 +0800 CST
ticket是一个只读的chanel。
go和其他语言的开发思路不一样。其他语言,多是注册回调函数,定时,时间到了调用回调。go是 通过 chan的阻塞实现的。
调用的地方,读取chan 。定时,时间到,向chan写入值,阻塞解除,调用函数。
Duration
"持续时间" https://studygolang.com/articles/12617
时间的加减
// 一天前
d, _ := time.ParseDuration("-24h")
d1 := now.Add(d)
fmt.Println(d1)
更多:https://studygolang.com/articles/8919
更多
package time https://studygolang.com/pkgdoc