一、时间和日期类型

1. time包

2. time.Time类型,用来表示时间

3. 获取当前时间, now := time.Now()

实例1-1  打印输出当前时间

package main

import (
"fmt"
"time"
) func main() {
//var now time.Time
//now = time.Now()
now := time.Now()
fmt.Printf("current time is %v\n", now)
}

执行结果:

4. 年: time.Now().Year()

月:time.Now().Month()

日:time.Now().Day()

时:time.Now.Hour()

分:time.Now().Minute()

秒:time.Now.Second()

5. 格式化, fmt.Printf(“%02d/%02d%02d %02d:%02d:%02d”, now.Year()…)

实例1-2     格式化输出当前时间

package main

import (
"fmt"
"time"
) func main() {
now := time.Now()
fmt.Printf("%02d/%02d/%02d %02d:%02d:%02d",
now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
}

执行结果如下:

6. 获取当前时间戳(时间戳就是1970年1月1日0点0分0秒到现在的秒数),

获取方法time.Now().Unix()。

实例1-3    打印当前时间时间戳及以纳秒形式显示

package main

import (
"fmt"
"time"
) func main() {
now := time.Now()
fmt.Printf("timestamp:%d ns:%d\n", now.Unix(), now.UnixNano())
}

执行结果如下:

注意:纳秒范围太大,如果要存储,需要用int64类型,不然就溢出了。

7. 时间戳转Time类型。

实例1-4

package main

import (
"fmt"
"time"
) func TimestampToTime(timestamp int64) { //时间戳是int64类型,所以我们这里必须定义为int64
t := time.Unix(timestamp, ) //传入参数对应的是秒和纳秒,这里把时间戳类型转化为time类型,因为传入的时间戳单位是秒,所以对应的纳秒我们写为0即可。
fmt.Printf("convert timestamp to time:%v\n", t)
} func main() {
now := time.Now()
TimestampToTime(now.Unix()) //传入的参数为当前的时间戳(单位是秒)
}

执行结果如下:

8. 定时器的简单使用(项目会用到(定时任务))

方法1:Newtimer(注意:只触发1次,必须reset,否则会堵塞)

实例1-5

package main

import (
"fmt"
"time"
) func testTimer() { //testTimer是遍历时间定时器的函数
timer := time.NewTimer(time.Second) //Newtimer相当于一个定时器,只触发一次
//time.second表示1秒,newtimer中用到了duration函数,其单位为纳秒,1秒等于10亿纳秒,太大,所以go语言中已经写好了这个方法,time.second表示1秒
for v := range timer.C {
//使用range类型去遍历channel,现在是当为1秒时(每隔1秒)去执行一下for循环
fmt.Printf("time:%v\n", v)
timer.Reset(time.Second) //如果不加reset,那么就会死锁(deadlock),因为newtimer只执行一次,之后就不往管道中插入时间,我们也就无法在管道中去遍历,所以会报死锁。
//加了reset之后,就相当于把当前定时器又重置回0秒,然后定时器到1秒后,又执行1次,这样就达到我们的目的了(不会阻塞,每个1秒重置一次)。
}
} func main() {
testTimer()
time.Sleep(time.Minute) //表示main主线程sleep一分钟后退出。
}

执行结果:

方法2:NewTicker(不需要reset,每隔1秒去触发1次)

package main

import (
"fmt"
"time"
) func testTicker() {
timer := time.NewTicker(time.Second)
for v := range timer.C {
fmt.Printf("time:%v\n", v)
}
}
func main() {
testTicker()
time.Sleep(time.Minute) //表示main主线程sleep一分钟后退出。
}

执行结果如下:

9. time.Duration用来表示纳秒

解释:

time包中的duration函数,其的单位是纳秒,这也是Go语言中时间最细的一个密度。

10. 一些常量,我们也可以直接拿去用:

const (
Nanosecond Duration =
Microsecond = * Nanosecond
Millisecond = * Microsecond
Second = * Millisecond
Minute = * Second
Hour = * Minute
)

11. 格式化

自带的format方法

2006年1月2日15时04分05秒是go语言诞生的日子,所以format方法的硬性规定就是:如果想格式化时间,并且借助format方法,就必须go语言的诞生时间做代码时间格式化的模板(必须是这个时间,如果不符,输出时间是不正确的):

格式如下:

now := time.Now()
fmt.Println(now.Format(“// ::”))
fmt.Println(now.Format(“// :”))
fmt.Println(now.Format(“//”))

实例1-6 

package main

import (
"fmt"
"time"
) func main() {
now := time.Now()
//方法1:
fmt.Printf("%02d/%02d/%02d %02d:%02d:%02d\n",
now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
// 方法2:
// 2016/01/02 15:04:05是go的诞生时间,必须写正确
str := now.Format("02/01/2006 15:04:05")
fmt.Printf("str:%s\n", str)
}

执行结果如下:

二、练习题

练习1:写一个程序,获取当前时间,并格式化成 2017/06/15 08:05:00形式

解答:

思路:此题方法较多,随便用哪一种格式化方法都可以;

package main

import (
"fmt"
"time"
) func main() {
now := time.Now()
str := now.Format("2006/01/02 15:04:05")
fmt.Printf("%s\n", str)
}

执行结果:

练习2:写一个程序,统计一段代码的执行耗时,单位精确到微秒

解答:

思路:代码执行之前获取一下时间,代码执行完在获取一下时间,两个时间相减,即为一段代码执行消耗的时间。

package main

import (
"fmt"
"time"
) func test() { //测试代码函数
for i := ; i < ; i++ {
_ = i //变量i未使用,这里我们忽略掉它
}
}
func main() {
//var now time.Time
//now = time.Now()
//start := now.UnixNano
start := time.Now().UnixNano() //开始时间
test()
end := time.Now().UnixNano() //结束时间
fmt.Printf("cost=%d us\n", (end-start)/) //纳秒转微妙
}

执行结果:

Go语言基础之3--时间和日期序列的更多相关文章

  1. R语言学习 第十一篇:日期和时间

    R语言的基础包中提供了三种基本类型用于处理日期和时间,Date用于处理日期,它不包括时间和时区信息:POSIXct/POSIXlt用于处理日期和时间,其中包括了日期.时间和时区信息.R内部在存储日期和 ...

  2. 【原创】go语言学习(三)字符串串、时间和日期类型

    目录 1.字符串串原理理解析2. 时间类型3. 日期类型 字符串串原理理解析 1.字符串串底层就是⼀一个byte数组,所以可以和[]byte类型互相转换2.字符串串之中的字符是不不能修改的,那怎么修改 ...

  3. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  4. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  5. php面试题之三——PHP语言基础(基础部分)

    三.PHP语言基础 1. strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部) strlen和mb_strlen都是用于获取字符串长度. strlen只针对单字节编码字符,也 ...

  6. 语言基础:C#输入输出与数据类型及其转换

    今天学习了C#的定义及特点,Visual Studio.Net的集成开发环境和C#语言基础. C#语言基础资料——输入输出与数据类型及其转换 函数的四要素:名称,输入,输出,加工 输出 Console ...

  7. 2008技术内幕:T-SQL语言基础

    2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...

  8. Java 8时间和日期API 20例

    本文由 ImportNew - Sandy 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. 伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的 ...

  9. Go语言基础之time包

    Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 Go语言中使用import关键字导入包,包的名字使用双引号(”)包裹 ...

随机推荐

  1. c# 新中新二代身份证阅读,包含头像,支持华视

    需要用到dll和文件: 其中3个dll文件是需要调用的dll,license.dat文件为解压图片的授权文件 以下是需要用到的dll里面的方法: /************************端口 ...

  2. Mac OS X 安装教程

    1)10.8.3 http://bbs.pcbeta.com/viewthread-1317754-1-1.html 2)10.9 http://blog.csdn.net/kissing_huo/a ...

  3. (转)Linux操作系统下VMware的多网卡桥接转换

    VMware,鼎鼎大名的虚拟机软件,没有人不知道吧?当然,在Linux下使用虚拟机软件,并不一定需要使用VMWare,Xen也是非常不错的选择,有很多评测就认为XEN的表现优于VMware.可惜的是X ...

  4. Entity Framework Tutorial Basics(25):Delete Single Entity

    Delete Entity using DBContext in Disconnected Scenario: We used the Entry() method of DbContext to m ...

  5. SDUT 3379 数据结构实验之查找七:线性之哈希表

    数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定 ...

  6. 国内物联网平台(3):QQ物联智能硬件开放平台

    国内物联网平台(3)——QQ物联·智能硬件开放平台 马智 平台定位 将QQ帐号体系.好友关系链.QQ消息通道及音视频服务等核心能力提供给可穿戴设备.智能家居.智能车载.传统硬件等领域的合作伙伴,实现用 ...

  7. 搭建邮件服务器 Postfix + Dovecot (CentOS)

    最近分配到一台ECS服务器,需要搭建一台邮件服务器. 查了一波资料选择了Postfix (smtp)和 Dovecot(pop3). 推荐教程:http://www.cnblogs.com/zlbei ...

  8. 读取txt文件的简易算法

    网友在问,从一个文本文件(txt)读取数据,并做简易算法.网友的原问题大约如下, 网友的问题,虽然说是全部是数字,但没有说明是否只有一行.因此Insus.NET在实现算法时,处理文本文件是否多行,是否 ...

  9. Ready api groovy script 参数化

    def token_type =context.expand ('${#Project#token_type}') def access_token = context.expand('${#Proj ...

  10. 洛谷 P2447 [SDOI2010]外星千足虫

    P2447 [SDOI2010]外星千足虫 题目描述 公元2089年6月4日,在经历了17年零3个月的漫长旅行后,“格纳格鲁一号”载人火箭返回舱终于安全着陆.此枚火箭由美国国家航空航天局(NASA)研 ...