GoLang 的时间处理

jopen 10年前

最近学习GoLang的time包,其实学习Go只是为了业余时间可以放松下。对于我这个小菜来说没有体会出Go卓越的方面对我自己的工作有什么影响,因为我是PHP程序员出生,很多都是别人封装好的代码,自己也不了解底层。只会用所以讲time包也是在应用的基础上面。

废话不多说上干货:

<?php  $str = date("Y-m-d H:i:s");  echo $str;//2014-01-02 23:20:00  ?>

相信熟悉PHP的读者应该知道这个东西就是获取当前时间的一个输出。

在Go语言中,可能很多PHPer并不能适应,因为在PHP中已经帮我们在拓展库中引入了时间相关处理函数,所以我们直接调用没有问题,但是在Go语言中,需要我们手动引入一个time的包

package main    import (   "fmt"   "time"  )    func main() {   t := time.Now()//获取当前时间的结构体   fmt.Println(t.Format("2006-01-02 15:04:05"))//格式化输出  }

初次用的使用者会很纳闷,我获取当前的时间,为什么还要写2006-01-02 15:04:05这个东西,因为作者想咱们饮水思源呀。记住这个时候就是Go语言诞生的时候,把这个作为时间格式让我们自己选择,当然更多格式方面的东西在time的format.go介绍,我由于只是抛砖引玉就不多做详解。

这个时候有人会问,我是PHPer我要时间戳,你怎么给我时间戳?大神想事情肯定比我们周全。看招:

package main    import (   "fmt"   "time"  )    func main() {   t := time.Date(2014, 1, 2, 0, 0, 0, 0, time.Local)   fmt.Println(t.Unix())  }

时间戳这不就出来了嘛。这个时候PHPer会想了,获取个时间戳写那么麻烦,还没有我直接用PHP爽呢。真挑剔啊。又要性能还要代码好写,程序员工资可以白拿了。来个时间比较的例子吧。我们在PHP中比较时间大小可能还要转个时间戳自己封装一个函数什么的。但是Golang Time包的作者玩时间肯定不是我们所能披靡的。来个时间比较的例子让你们感受下

package main    import (   "fmt"   "time"  )    func main() {   t := time.Date(2014, 1, 2, 0, 0, 0, 0, time.Local)   b := time.Date(1999, 1, 1, 8, 0, 0, 0, time.Local)   fmt.Println(t.Before(b))//t的时间在b之前?  明显答案是false      fmt.Println(t.After(b))//t的时间在b之后?   明显答案是true  }

忘记咱们的PHPer时间戳比大小的逻辑判断吧,用语言表达。当然不是黑PHP表达不清楚,会封装函数的PHPer自己都知道要怎么实现一些方法来让自己的代码可读性高。以后我的代码也可能参考这个Go来封装,而且还能死规定自己的时间原点。例如生日,让使用封装包的家伙记住我的生日什么的。

哈哈,扯远了,学习一门新语言就是用他了,然后优点借鉴过来让自己的代码更加好读。希望比我更加了解time包的高人,多多留言,我也想更加了解多点Go在时间处理上面先进的东西。


来自:http://my.oschina.net/alexskywinner/blog/189693