go time包的使用

类型

time.Time{}

时间类型,包含了秒和纳秒以及Location

wall uint64//秒
ext  int64//纳秒
loc *Location

time.Month()

type Month int

月份.定义了十二个月的常量

Weekday

type Weekday int 周,定义了一周的七天

Duration

time.Duration()

持续时间.定义了以下持续时间类型.多用于时间的加减 需要传入Duration做为参数的时候

const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

Location

在time包里有两个时区变量:

time.UTC utc时间
time.Local 本地时间
FixedZone(name string, offset int) *Location
设置时区名,以及与UTC0的时间偏差.返回Location

Timer(定时器)

定时器只会传达一次到期事件,

type Timer struct {
    C <-chan Time
    r runtimeTimer
}

Ticker(断续器)

周期性的传达到期事件的装置,

定时器只会传达一次到期事件,断续器会持续工作直到停止

type Ticker struct {
    C <-chan Time // The channel on which the ticks are delivered.
    r runtimeTimer
}

time包的常用函数

time.Now()

获取当前时间,返回Time类型

func Sleep(d Duration)

表示睡多少时间,睡觉时,是阻塞状态

Since(t Time) Duration

返回与当前时间的时间差

Unix(sec int64, nsec int64) Time

根据秒数和纳秒,返回Time类型

(若只有秒或者毫秒,另一个参数为零)

func Until(t Time) Duration

计算t到当前的时间差.返回类型Duration

func After(d Duration) <-chan Time

返回一个time.C这个管道,d(时间间隔)后会在此管道中放入一个时间点(time.Now())

func AfterFunc(d Duration, f func()) *Timer

将一个间隔和一个函数给AfterFunc后,间隔时间过后,执行传入的函数(执行一遍)

func NewTimer(d Duration) *Timer

新的定时创建一个新的定时器,将当前时间的通道后至少持续时间D.

func Parse(layout, value string) (Time, error)

将字符窜转换为Time类型.

layout := ""2006-01-02 15:04:05.999999""
t, _ := time.Parse(layout, "2013-10-05 18:30:50")
fmt.Println(t.Year())
// 当前时区时间格式化转换
strTime := "2018-03-24T20:01:00+08:00"
tim, _:=time.ParseInLocation("2006-01-02T15:04:05+08:00", strTime, time.Local)

func ParseDuration(s string) (Duration, error)

将字duration符窜("ns", "us" (or "碌s"), "ms", "s", "m", "h".)转换为Duration类型.就是纳秒

t, _ := time.ParseDuration("1h")
fmt.Println(t.Seconds())

func ParseInLocation(layout, value string, loc *Location) (Time, error)

parseinlocation像解析,但在两个重要方面不同。首先,在时区信息的情况下,分析解释时间UTC;parseinlocation解释时间在给定的位置。其次,当给定一个带偏移或缩写,解析试图匹配与局部的位置;parseinlocation使用给定的位置。

func NewTicker(d Duration) *Ticker

创建一个新的Ticker

func Tick(d Duration) <-chan Time

返回一个time.C这个管道,d(时间间隔)后会在此管道中放入一个时间点(time.Now())

func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time

设置年月日返回,Time类型

LoadLocation(name string) (*Location, error)

给定名称返回位置

func FixedZone(name string, offset int) *Location

给定名称和偏移量返回位置

Time类型

After(u Time) bool

时间类型比较,是否在Time之后

Before(u Time) bool

时间类型比较,是否在Time之前

Equal(u Time) bool

比较两个时间是否相等

IsZero() bool

判断时间是否为零值,如果sec和nsec两个属性都是0的话,则该时间类型为0

Date() (year int, month Month, day int)

返回年月日,三个参数

Year() int

返回年份

Month() Month

返回月份.是Month类型

Day() int

返回多少号

Weekday() Weekday

返回星期几,是Weekday类型

ISOWeek() (year, week int)

返回年份,和该填是在这年的第几周.

Clock() (hour, min, sec int)

返回小时,分钟,秒

Hour() int

返回小时

Minute() int

返回分钟

Second() int

返回秒数

Nanosecond() int

返回纳秒

Unix() int64

返回时间戳,自从1970年1月1号到现在的秒值

UnixNano() int64

返回时间戳.包含纳秒值

func (t Time) Format(layout string) string

将时间转化为一个格式

t.Format("2006-01-02 15:04")

Add(d Duration) Time

为一个时间,添加的时间类型为Duration.更精确到纳秒.比起AddDate

Sub(u Time) Duration

计算两个时间的差.返回类型Duration

AddDate(years int, months int, days int) Time

添加时间.以年月日为参数

UTC() Time

设置location为UTC,然后返回时间.就是utc为0.比中国晚了八个小时.

Local() Time

设置location为本地时间.就是电脑时间.

In(loc *Location) Time

设置location为指定location

Location() *Location

获取时间的Location,如果是nic,返回UTC,如果为空,则代表本地

Zone() (name string, offset int)

返回时区,以及与utc的时间偏差

一般时间的操作

获取当前时间

now := time.Now()

纳秒/毫秒/秒转换

fmt.Println(ns / 1e6) //纳秒转毫秒
fmt.Println(ns / 1e9) //纳秒转秒

格式化时间

time.Now().Format("2006-01-02 15:04")

字符串转Time

withNanos := "2006-01-02 15:04:05"
t, _ := time.Parse(withNanos, "2013-10-05 18:30:50")
fmt.Println(t.Year())

定时器

go func() {
    var timer *time.Timer
    for   {
        select {
        case <- func() <-chan time.Time {
            if timer==nil {
                timer=time.NewTimer(time.Millisecond)
            }else {
                timer.Reset(time.Millisecond)
            }
            return timer.C
        }():
            fmt.Println("time out")
            break
        }
    }
}()

断续器(每隔固定时间执行一次)

var ticker *time.Ticker=time.NewTicker(time.Millisecond)
ticks:=ticker.C
go func() {
    for tick:=range ticks {
        fmt.Println(tick)
    }
}()

定时每天固定时间

func TestPayCenterWrite(t *testing.T) {
    timeNow := time.Now() //获取当前时间
    //获取当前零时
    zeroHour := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 0, 0, 0, 0, timeNow.Location())
    //获取下一个零时
    next := zeroHour.Add(time.Hour * 24)
    //当前时间和下一个零时创建时间差创建定时器
    timer := time.NewTimer(next.Sub(timeNow))
    <-timer.C
    go func()
    var ticker *time.Ticker = time.NewTicker(time.Hour * 24)
    ticks := ticker.C
    for range ticks {
        go func()
    }
}

计算两个点的时间差

func TestMountSubrouterOn(t *testing.T) {
    createTime:="2018-05-07 16:20:23"
    create_Time, _ := time.ParseInLocation("2006-01-02 15:04:05", createTime,time.Now().Location())
    sub:=time.Now().Sub(create_Time)
    fmt.Println(sub.Minutes())
    fmt.Println(create_Time.Location().String())
    fmt.Println(time.Now().Location())
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 原文链接 http://ironxu.com/747 介绍Go 标准库 time 常用导出函数,结构体及其方法。 ...
    好刚编程阅读 16,951评论 2 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,733评论 0 38
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,864评论 6 13
  • 霜林遍染离人泪,雾花空望故人情。此愁漫漫何处销,付与春水流至冰。
    王神马阅读 208评论 0 1