zoukankan      html  css  js  c++  java
  • Golang的时间生成,格式化,以及获取函数执行时间的方法

    最近都在通过完成一些列功能强化自己对常用api的熟悉。

    然而关于时间的api几乎是最常用的api类型,所以总结一些常用的。

    以YY-mm-dd HH:MM:SS.9位 输出当前时间:

    func main() {
        fmt.Println(time.Now())
    }
    output:
    2017-02-27 01:20:00.567634365 +0800 CST

    获取时间戳:

    func main() {
        fmt.Println(time.Now().Unix())
    }

    output:
    1488129589

    给定一个时间戳,返回一个标准datetime时间:

    func main() {
        timestamp := time.Now().Unix()
        fmt.Println(time.Unix(timestamp, 0))
    }

    output:
    2017-02-27 01:18:07 +0800 CST

    指定一个时间:

    func main() {
        fmt.Println(time.Date(2017, 02, 27, 20, 20, 20, 20, time.Local))
    }

    output:
    2017-02-27 20:20:20.00000002 +0800 CST

    这里注意,Date初始化的时候最后一个参数,传的是一个地区struct,可以直接引用time包给我提供现成的utc时区,也可以用local本地计算机的。由于直接给了nsec参数,所以要定义毫秒微妙啥的。。自己乘吧,一般自己定义一个时间用到毫秒之类的数据吧。

    然后这里重点说一下,格式化时间。。go这个格式化时间第一次我看到的时候是真的懵b了,先来看个例子

    格式化时间:

    x := time.Date(2017, 02, 27, 17, 30, 20, 20, time.Local)
    fmt.Println(x.Format("2006-01-02 15:04:05"))
    
    output:
    2017-02-27 17:30:20

    看上去是不是有点懵? 2006-01-02 15:04:05这个每组数字都是有独特的含义的,就是相当于拿一段数字来代替了我们其他语言常用的YY:mm:ss HH-MM-SS 这样。但是其实习惯之后发现这个设计还蛮好记的,直接记12345就好了。3那个位置的数这里我使用的15,也就是用24小时格式来显示,如果直接写03则是12小时am pm格式。

    字符串转时间戳:

    func main() {
        x := "2017-02-27 17:30:20"
        p, _ := time.Parse("2006-01-02 15:04:05", x)
        fmt.Println(p.Unix())
    }
    
    output:
    1488216620

    字符串转时间(其实使用time.Parse转回来就是和字符串相同的格式了)

    func main() {
        x := "2017-02-27 17:30:20"
        p, _ := time.Parse("2006-01-02 15:04:05", x)
        fmt.Println(p)
    }
    
    output:
    2017-02-27 17:30:20 +0000 UTC

    其他还有很多类似After(), Before()等的api 用来判各种,但是平时用得最多的应该就是上面的类型api了,其实多用几次也就熟悉了。

    另外额外说一下,我还没有来得及在golang里面查找在python中类似time.timit的库,但是我注意到time模块也提供这个查看运行时间的方法,而且还异常方便,只需要在函数执行的最开始取一个当前时间,然后将其作参数传给time.Since(time.Time)就可以获得运行时间了。非常方便。但是没有找到支持多次运行,或者repeat之类的参数支持,回头再看看吧上个例子:

    func main() {
        t1 := time.Now()
    
        x := "2017-02-27 17:30:20"
        p, _ := time.Parse("2006-01-02 15:04:05", x)
        fmt.Println(p)
    
        elapsed := time.Since(t1)
        fmt.Println("App elapsed: ", elapsed)
    }
    
    outside:
    2017-02-27 17:30:20 +0000 UTC
    App elapsed:  51.044µs

    Reference:

    https://golang.org/src/time/example_test.go  example_test_for_time

    http://www.cnblogs.com/baiyuxiong/p/4349595.html  Go时间戳和日期字符串的相互转换

  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/piperck/p/6471352.html
Copyright © 2011-2022 走看看