Go语言基础之3--时间和日期序列
一、时间和日期类型
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--时间和日期序列的更多相关文章
- R语言学习 第十一篇:日期和时间
R语言的基础包中提供了三种基本类型用于处理日期和时间,Date用于处理日期,它不包括时间和时区信息:POSIXct/POSIXlt用于处理日期和时间,其中包括了日期.时间和时区信息.R内部在存储日期和 ...
- 【原创】go语言学习(三)字符串串、时间和日期类型
目录 1.字符串串原理理解析2. 时间类型3. 日期类型 字符串串原理理解析 1.字符串串底层就是⼀一个byte数组,所以可以和[]byte类型互相转换2.字符串串之中的字符是不不能修改的,那怎么修改 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- C#语言基础
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
- php面试题之三——PHP语言基础(基础部分)
三.PHP语言基础 1. strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部) strlen和mb_strlen都是用于获取字符串长度. strlen只针对单字节编码字符,也 ...
- 语言基础:C#输入输出与数据类型及其转换
今天学习了C#的定义及特点,Visual Studio.Net的集成开发环境和C#语言基础. C#语言基础资料——输入输出与数据类型及其转换 函数的四要素:名称,输入,输出,加工 输出 Console ...
- 2008技术内幕:T-SQL语言基础
2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...
- Java 8时间和日期API 20例
本文由 ImportNew - Sandy 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. 伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的 ...
- Go语言基础之time包
Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 Go语言中使用import关键字导入包,包的名字使用双引号(”)包裹 ...
随机推荐
- 详解CSS盒模型(转)
详解CSS盒模型 阅读目录 一些基本概念 盒模型 原文地址:http://luopq.com/2015/10/26/CSS-Box-Model/ 本文主要是学习CSS盒模型的笔记,总结了一些基本概 ...
- java格式化数字、货币、金钱
网上摘来的,以后可能会用到 java开发中经常会有数字.货币金钱等格式化需求,货币保留几位小数,货币前端需要加上货币符号等.可以用java.text.NumberFormat和java.text.De ...
- 定时node-schedule 模块的使用
You can install using npm. npm install node-schedule var schedule = require('node-schedule'); var j ...
- nodejs读文件
1.异步读取文件:var fs= require('fs'); // 从文件系统中读取请求的文件内容 fs.readFile(pathname.substr(1), function (err, da ...
- 主键primary key和唯一索引unique index
1)主键一定是唯一性索引,唯一性索引并不一定就是主键. 2)主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引. 3)主键常常与外键构成参照完整性约束,防止出现数 ...
- 算法Sedgewick第四版-第1章基础-021一双向链表,在遍历时可修改、删除元素
package algorithms.ADT; /*************************************************************************** ...
- 715B Complete The Graph
传送门 题目大意 给出一个图,一些边带权,另一些边等待你赋权(最小赋为1).请你找到一种赋权方式,使得 s 到 t 的最短路为 L n ≤ 1e3 ,m ≤ 1e4 ,L ≤ 1e9 分析 二分所有边 ...
- bootstrap.js 文件使用指南
介绍 使用 Bootstrap v3.3.7 时,需要引入三个脚本文件. https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.m ...
- c#中public,private,protected,internal的区别
public 可以被外部成员调用 private 只能在被类的成员调用 protected 只能在被类的成员和该类的子类调用 internal 可以在当前项目调用 pub ...
- Picasso VS Glide
原文: Introduction to Glide, Image Loader Library for Android, recommended by Google 在泰国举行的谷歌开发者论坛上,谷歌 ...