前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言标准库之time

Go语言标准库之time

作者头像
程序员同行者
发布2019-01-03 10:55:25
7510
发布2019-01-03 10:55:25
举报
文章被收录于专栏:程序员同行者

Go语言标准库之time

时间的格式化和解析
  • 格式化 Format Go语言和其他语言的时间格式化的方式不同,Go语言格式化的方式更直观,其他的语言一般是yyyy-mm-dd
代码语言:javascript
复制
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Println(now.Format("2006-01-02 15:04:05"))
    fmt.Println(now.Format("2006/01/02 15:04:05"))
    fmt.Println(now.Format("2006年01月02日 15:04:05"))
}

输出结果是

代码语言:javascript
复制
2019-01-01 10:45:502019/01/01 10:45:50
2019年01月01日 10:45:50

在系统中还提供了一些默认的格式

代码语言:javascript
复制
   ANSIC       = "Mon Jan _2 15:04:05 2006"
    UnixDate    = "Mon Jan _2 15:04:05 MST 2006"
    RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"
    RFC822      = "02 Jan 06 15:04 MST"
    RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
    RFC850      = "Monday, 02-Jan-06 15:04:05 MST"
    RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"
    RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
    RFC3339     = "2006-01-02T15:04:05Z07:00"
    RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
    Kitchen     = "3:04PM"
    // Handy time stamps.
    Stamp      = "Jan _2 15:04:05"
    StampMilli = "Jan _2 15:04:05.000"
    StampMicro = "Jan _2 15:04:05.000000"
    StampNano  = "Jan _2 15:04:05.000000000"

使用方法:

代码语言:javascript
复制
fmt.Println(now.Format(time.RFC3339))
  • 解析 Parse
代码语言:javascript
复制
func Parse(layout, value string) (Time, error)
代码语言:javascript
复制
t1, err := time.Parse("2006-01-02 15:04:05", "2019-01-01 10:54:11")
t2, err := time.Parse("2006/01/02 15:04:05", "2019/01/01 10:54:59")
t3, err := time.Parse("2006年01月02日 15:04:05", "2019年01月01日 10:54:59")
if err != nil {
   log.Fatal(err)
}
fmt.Println(t1)
fmt.Println(t2)
fmt.Println(t3)

输出结果是

代码语言:javascript
复制
2019-01-01 10:54:11 +0000 UTC
2019-01-01 10:54:59 +0000 UTC
2019-01-01 10:54:59 +0000 UTC

获取时间戳 使用time.Nowtime.Unixtime.UnixNano方法获取对应的时间戳

代码语言:javascript
复制
sec := now.Unix()      //秒
nsec := now.UnixNano() //纳秒
fmt.Println(sec)
fmt.Println(nsec)

输出结果

代码语言:javascript
复制
1537498785
1537498785523262700
  • 解析时间戳 根据时间戳获取当前时间
代码语言:javascript
复制
t := time.Unix(sec, 0)
fmt.Println(t)
fmt.Println(t.Format("2006-01-02 15:04:05"))

输出结果

代码语言:javascript
复制
2019-01-01 11:05:30 +0800 CST
2019-01-01 11:06:43

获取当前的日期和时间

代码语言:javascript
复制
year, month, day := now.Date()
fmt.Println(year, month, day)
fmt.Println(year, int(month), day)
fmt.Printf("year:%d month:%d day:%d", year, month, day)
hour, minute, second := now.Clock()
fmt.Println(hour, minute, second)

输出结果

代码语言:javascript
复制
2019 January 1
2019 1 1
year:2019 month:1 day:1
11 11 34

关于星期

代码语言:javascript
复制
weekday := now.Weekday()
fmt.Println(weekday)      // Friday
fmt.Println(int(weekday)) //5

输出结果

代码语言:javascript
复制
Friday
5

星期日是0

计算已经过去了多少天

代码语言:javascript
复制
days := now.YearDay()
fmt.Println(days)

输出结果

代码语言:javascript
复制
264

计算两个日期的时间差

代码语言:javascript
复制
date1 := time.Date(2017, time.Month(1), 1, 0, 0, 0, 0, time.UTC)
date2 := time.Date(2018, time.Month(1), 1, 0, 0, 0, 0, time.UTC)
hours := date2.Sub(date1).Hours()
fmt.Println(hours)
between_days := hours / 24
fmt.Println(between_days)

输出结果

代码语言:javascript
复制
8760
365

获取月份中的天数 time.Day()方法是获取本月之前过去的天数,获取月份中天数,初始化时天设置为0,就是获取上月的天数, 月数+1就可以获取本月的天数

代码语言:javascript
复制
month_days := time.Date(now.Year(), now.Month() + 1, 0, 0, 0, 0, 0, time.UTC).Day()
fmt.Println(month_days)

计算执行的时间

代码语言:javascript
复制
start := time.Now()  //程序执行开始
//.... 程序代码
duration := time.Since(start) //执行结束
fmt.Println(duration)
fmt.Println(duration.Nanoseconds())

输出结果

代码语言:javascript
复制
18.9889ms
18988900
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go语言标准库之time
    • 时间的格式化和解析
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档