分享
  1. 首页
  2. 文章

Go语言_时间篇

yjf512 · · 2862 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

哎,先发下牢骚,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之旅结束!!


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:yjf512

查看原文:Go语言_时间篇

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2862 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏