golang中的time包是用来处理时间的。

1.时间的基本属性

package main

import (
"fmt"
"strings"
"time"
) func main() {
//golang中的时间是一个time.Time结构体类型 // 1.获取当前时间
now := time.Now()
fmt.Println(now) // 2019-08-28 22:26:09.944995 +0800 CST m=+0.003962701
fmt.Printf("时间的类型:%#v\n", now) // 时间的类型:time.Time{wall:0xbf51c1a078537ab8, ext:3962701, loc:(*time.Location)(0x57bfe0)} //2.获取对应的年月日时分秒
fmt.Printf("year is %d,month is %d, day is %d\n", now.Year(), now.Month(), now.Day()) // year is 2019,month is 8, day is 28
fmt.Printf("hour is %d,minute is %d, second is %d\n", now.Hour(), now.Minute(), now.Second()) // hour is 22,minute is 28, second is 23
fmt.Printf("一周当中的第几天:%d,一年当中的第几天:%d\n", now.Weekday(), now.YearDay()) // 一周当中的第几天:3,一年当中的第几天:240
//打印当前时区
fmt.Println(now.Zone()) // CST 28800 //转化为字符串类型
fmt.Printf("%s|||||%t\n", now.String(), strings.HasPrefix(now.String(), "2019-08-28")) // 2019-08-28 22:36:03.6088057 +0800 CST m=+0.003989601|||||true //只打印年月日
fmt.Println(now.Date()) // 2019 August 28
}

2.时间戳

package main

import (
"fmt"
"time"
) func main() {
now := time.Now()
//获取时间戳
fmt.Printf("时间戳:%d,纳秒时间戳:%d\n", now.Unix(), now.UnixNano()) // 时间戳:1567003243,纳秒时间戳:1567003243127399800 //将时间戳转化为时间格式,第二个参数表示偏移量,表示便宜多少纳秒,一般写0即可
fmt.Println(time.Unix(1567003243 + 3600, 0)) // 2019-08-28 23:40:43 +0800 CST
}

3.时间间隔

package main

import (
"time"
) func main() {
//golang里面定义了很多关于时间的常量
/*
const (
Nanosecond Duration = 1 纳秒
Microsecond = 1000 * Nanosecond 微秒
Millisecond = 1000 * Microsecond 毫秒
Second = 1000 * Millisecond 秒
Minute = 60 * Second 分钟
Hour = 60 * Minute 小时
)
*/
time.Sleep(1) // 睡眠,如果写上一个1,表示睡眠1纳秒
time.Sleep(time.Second) // 睡1秒
}

4.时间格式化

package main

import (
"fmt"
"time"
) func main() {
//将字符串的时间转成golang中的时间类型
s := "2018-11-21 12:35:24"
//golang中没有%Y-%m-%d %H:%M:%S这种格式,而是使用2006-01-02 15:04:05这种格式
//为什么呢?因为官方说这是golang的诞生时间,所以必须使用这个模板进行格式化,关于里面的15,表示的是下午3点,也可以写成03
//或者简写成2006-1-2 3:4:5也行,表示2006年1月2号 下午3点4分5秒,2006 1 2 3 4 5,比较好记
t, err := time.Parse("2006-1-2 3:4:5", s)
if err != nil {
fmt.Println(err)
}else {
fmt.Println(t) // 2018-11-21 12:35:24 +0000 UTC
fmt.Println(t.Year()) // 2018
fmt.Println(t.Month()) // November
fmt.Println(t.Day()) // 21
} //日期转成时间
now := time.Now()
//可以像我们之前用的直接使用String,但是这样不是我们想要的
fmt.Println(now.String()) // 2019-08-28 23:08:14.9255387 +0800 CST m=+0.004986701
//使用Format格式化,输入格式,但是注意的是,我们之前说 6 1 2 3 4 5,
//注意这里的小时,我们可以写15 也可以写3,但是写3的话,就不知道到底是上午的11点,还是下午的11点
//所以我们还是最好写15,这样不会有歧义,11就表示上午的11,如果晚上则是23
fmt.Println(now.Format("2006-1-2 3:4")) // 2019-8-28 11:8
fmt.Println(now.Format("2006-1-2 15:4")) // 2019-8-28 23:8
}

5.定时器

定时器需要搭配channel使用

package main

import (
"fmt"
"time"
) func main() {
//当我这样的定义的时候,两秒钟之后,time.C里面就会有值
timer := time.NewTimer(time.Second * 2)
//如果没到2秒,那么这里会卡住,因为timer.C是一个channel,要2s后才会往里面写入值
//但是需要注意的是:并不是我调用了<-timer.C,才开始写入,而是当我调用NewTimer的时候就已经开始了
//如果我sleep两秒后,再调用<timer.C,那么会瞬间打印出值,因为2s已经过去了,timer.C里面已经有值了。
//这里会打印当前时间
fmt.Println(<-timer.C) // 2019-08-28 23:20:51.9973729 +0800 CST m=+2.004240601 //定时器的重置
//这里写成10s,那么要等到10秒之后,time.C里面才会有值
timer1 := time.NewTimer(time.Second * 10)
timer1.Reset(time.Second) //这里改成一秒
//那么1s后这里就会打印出值
fmt.Println(<-timer1.C) // 2019-08-28 23:20:53.0093997 +0800 CST m=+3.016267401 //定时器的停止
timer2 := time.NewTimer(time.Second * 10)
timer2.Stop()
// fmt.Println(<-timer2.C) 一旦定时器停止,time2.C这个通道也就关闭了,如果再试图从timer2.C里面读取数据,就会造成死锁。
}
package main

import (
"fmt"
"time"
) func main() {
//除了Timer,还有一个Ticker。和Timer用法一样,只不过Ticker是循环获取,Timer只获取一次
ticker := time.NewTicker(time.Second)
for i:=0;i<5;i++{
fmt.Printf("第%d次循环 %v\n",i+1,(<-ticker.C).Format("2006-1-2 15:4:5"))
/*
第1次循环 2019-8-28 23:26:14
第2次循环 2019-8-28 23:26:15
第3次循环 2019-8-28 23:26:16
第4次循环 2019-8-28 23:26:17
第5次循环 2019-8-28 23:26:18
*/
}
//当然定时器也可以停止,但是无法重置,这里不再演示
}

time:时间就是生命的更多相关文章

  1. 我是如何将页面加载时间从6S降到2S的?

    写在前面 生活在信息爆炸的今天,我们每天不得不面对和过滤海量的信息--无疑是焦躁和浮动的,这就意味着用户对你站点投入的时间可能是及其吝啬的(当然有一些刚需站点除外). 如何给用户提供迅速的响应就显得十 ...

  2. 妙用psexec分析关机一直挂起的Windows update 更新

    Windows 更新服务对每个IT运维人员来说都不会陌生,而且很多情况下出现的一些不兼容,产品问题通过更新都可很好的解决掉. 小弟近日为一台老爷机服务器安装Windows 产品更新就遇到了意见事情,特 ...

  3. cookie (储存在用户本地终端上的数据)

    Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).定义于 RFC2109 和 2965 中的都已废弃 ...

  4. 用java开发微信公众号:测试公众号与本地测试环境搭建(一)

    本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...

  5. 物联网应用中实时定位与轨迹回放的解决方案 – Redis的典型运用(转载)

    物联网应用中实时定位与轨迹回放的解决方案 – Redis的典型运用(转载)   2015年11月14日|    by: nbboy|    Category: 系统设计, 缓存设计, 高性能系统 摘要 ...

  6. chardet坑——比蜗牛还慢

    需求 最近在做一个功能,使用python爬取网页然后保存到本地.其中遇到的一个难题是判断页面的编码方式.有问题就百度喽,当时我没想到自己去解决.一百度就找到了一个叫chardet的插件.大喜过望,试了 ...

  7. Unity手游之路<十三>手游代码更新策略探讨

    http://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙,加上家里事情也多,所以blog更新一直搁置了.最近在项目开发上线过程中 ...

  8. A Year Of Books - 2016 Javaer书单

    A Year Of Books - 2016 Javaer书单 (PS:欢迎留言推荐,很多来自白衣大哥的推荐) 1. OS & Networking <编码 : 隐匿在计算机软硬件背后的 ...

  9. 《慕客网:IOS-动画入门》学习笔记

    新建Cocoa Touch Class,语言是swift 然后继续为界面添加一个普通的View Controller,并且添加前面视图的静态table的转向剪头指向这个View Controller, ...

随机推荐

  1. 开源的图片查看库之PhotoView

    PhotoView是一个开源的图片查看库,可以实现图片的浏览,手势放大缩小等操作,以及支持在ViewPager中翻页浏览图片等功能.PhotoView使用简单,还可以对缩放模式进行设置, 其开源地址为 ...

  2. 【例3】设有关系模式R(A, B, C, D, E)与它的函数依赖集F={A→BC, CD→E, B→D, E→A},求R的所有候选键。 解题思路:

    通过分析F发现,其所有的属性A.B.C.D.E都是LR类属性,没有L类.R类.N类属性. 因此,先从这些属性中依次取出一个属性,分别求它们的闭包:=ABCDE,=BD,=C,=D, =ABCDE.由于 ...

  3. Jmeter实现简单web负载测试

    Jmeter实现简单web负载测试 简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. ...

  4. 如何在Github下载jackson的jar包

    -------------------------这是jackson-annotations的,往下拉找到Downloads就有jar包下载了 https://github.com/FasterXML ...

  5. Python 爬虫的工具列表

    Python 爬虫的工具列表 这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycur ...

  6. oracle_协议适配器错误_协议适配器不可加载_TNS监听程序在connect-data中未获得service-name

    最近在使用powerdesigner连接远程oracle进行反向工程操作时,出现了一些问题,这些问题很普遍,大多是由于配置引起的 说明:(1)远程数据库版本问 oracle11g 64bit (2)本 ...

  7. 使用URLOS在linux系统中极速部署NFS共享存储服务

    如何在linux系统里搭建NFS服务?其实我们只需要安装一个URLOS面板,然后就能在3分钟内将NFS服务部署完成.近日,URLOS在应用市场中上架了一款NFS应用,它可以让我们的节点主机在3分钟内极 ...

  8. 学习前端D1

    第一次写博客,有些小激动,以前写学习的记录都是在有道云笔记上写的,在博客园上更多的是膜拜大佬.偷师学艺.前段时间,我和朋友闲聊时,知道用博客每天写知识会提高学习的热情,这感情好呀,于是乎,今天,我依旧 ...

  9. 解决Wamp的 Error D:\wamp or PHP path 错误

    之前早早就用了wamp,发现还是挺好用的,就是刚开始改端口号之类的配置有点麻烦,不过还是一一解决了. 就在昨天安装了 composer . 突然发现wamp 有一个错 “Error D:\wamp o ...

  10. Java 200道题

    1. junit用法,before,beforeClass,after, afterClass的执行顺序 一个测试类单元测试的执行顺序为: @BeforeClass –> @Before –&g ...