zoukankan      html  css  js  c++  java
  • Go语言_时间篇

    哎,先发下牢骚,Go文档还是太弱了,特别是标准库中的文档说明,很多函数几乎就一句话过了。这点确实该向Microsoft的MSDN好好学学。

    Go的time包是标准库中的包之一

    不用说,几乎是开发必须用到的包之一。time包的说明文档在:

    http://golang.org/pkg/time/

    先注意下Overview中的一句话:

    The calendrical calculations always assume a Gregorian calendar.

    这个包的时间计算式是基于格里历,就是我们使用的公历。关于格里历的历史,可以看百度百科:

    http://baike.baidu.com/view/391054.htm

    看看godoc文档,最大的数据类型就是Time了,这个Time类型最微小可以表示到nanosecond(微毫秒,十亿份之一秒)。

    clip_image001

    Time的比较是使用Before,After和Equal方法。看一眼After:

    func (t Time) After(u Time) bool

    很好,返回的是bool类型,是我们所需要的。

    Sub方法返回的是两个时间点之间的时间距离,看上图看到它返回的是Duration结构,这个结构的具体类型和操作也在godoc中

    Add方法和Sub方法是相反的,获取t0和t1的时间距离d是使用Sub,将t0加d获取t1就是使用Add方法

    IsZero方法:Time的zero时间点是January 1, year 1, 00:00:00 UTC,这个函数判断一个时间是否是zero时间点

    Local,UTC,Ln是用来显示和计算地区时间的。

    下面从几个需求直接看time的使用

    1 请打出当前时间的时间戳,然后将时间戳格式为年月日时分秒的形式

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        //时间戳
        t := time.Now().Unix()
        fmt.Println(t)
        
        //时间戳到具体显示的转化
        fmt.Println(time.Unix(t, 0).String())
        
        //带纳秒的时间戳
        t = time.Now().UnixNano()
        fmt.Println(t)
        fmt.Println("------------------")
        
        //基本格式化的时间表示
        fmt.Println(time.Now().String())
        
        fmt.Println(time.Now().Format("2006year 01month 02day"))
    
    }

    显示:

    clip_image002

    特别是Format这个函数,可以好好使用

    2 输出当前星期几?

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        //时间戳
        t := time.Now()
        fmt.Println(t.Weekday().String())
    
    }

    clip_image003

    文档中对这个Weekday类型就没有说明!!没法,直接看代码可以看到:

    clip_image004

    Weekday有一个String()方法

    好了,看到这里外带我们有一个推测:

    当一个结构中有定义String()函数的时候,fmt.Println()是会调用String的

    例子如下:

    package main
    
    import (
        "fmt"
    )
    
    type MyStruct struct{
    }
    
    func (d MyStruct)String() string {return "mystruct"}
    
    func main() {
        me := new(MyStruct)
        fmt.Println(me)
    
    }

    clip_image005

    Go的Time之旅结束!!

    实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    sleep(),wait(),yield(),notify()
    (三)终结任务
    (二)共享受限资源
    (一)基本的线程机制
    (十八)多线程
    (十七)泛型程序设计
    视频监控中带宽及存储容量的计算
    turtle实例
    python ——钟表
    Python Tkinter Grid布局管理器详解
  • 原文地址:https://www.cnblogs.com/yjf512/p/2546243.html
Copyright © 2011-2022 走看看