一、时间和日期类型

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. JAVA基础知识总结13(同步)

    好处:解决了线程安全问题. 弊端:相对降低性能,因为判断锁需要消耗资源,还容易产生了死锁. 定义同步是有前提的: 1,必须要有两个或者两个以上的线程,才需要同步. 2,多个线程必须保证使用的是同一个锁 ...

  2. oracle -sqlplus 调用存储过程

    sp.batsqlplus user/passwd/sid  @.\sp.sql >sp.sqlexit; sp.sqlexex xxxx()quit;

  3. phonegap创建项目

    cordova create LynApp com.LynApp "LynApp"cd LynAppcordova platform add androidcordova buil ...

  4. 卸载phonegap

    npm uninstall cordova  -gnpm uninstall phonegap -g

  5. C++重载流插入和流输出运算符

    demo: /* Name: 重载输入输出流运算符使力代码 Copyright: qianshou Author: zhaozhe Date: 07/12/13 00:11 Description: ...

  6. 32-回文字符串(dp)

    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=37 回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描 ...

  7. php学习笔记-php中的比较运算符

    其中比较难懂的是==和=== ==是只比较两个变量的值,不仅仅是用于比较两个数是否相等,还可以比较int和string,不过会先转化string为int类型再比较,值相等则返回true,值不相等则返回 ...

  8. 你可能不知道的pdf的功能

    可以创建交互式的pdf,比如在pdf页面添加一个按钮, 添加一个文本框. 上篇文章说了pdf有可移植性,这是个非常重要的特性,我就想能否把3d模型放入到pdf中,这样即使对方电脑没有3d软件也可以查看 ...

  9. WOJ 41 约数统计

    只会写60分算法QuQ 考虑到一个数$x$大于$\sqrt{x}$的质因数最多只有一个,我们可以筛出小于$\sqrt{r}$范围内的所有质因数然后直接用这些取分解质因数. 最后扫一遍发现还没有分解完的 ...

  10. 总结:kathasis如何发送get请求获取数据

    1.进入前端页面,找到对应的模块,开始塞字段数据. 2.如果字段为基本类型,如String,比如website,则在前段界面,右击,inspect,找到对应的代码所处的jsp,跳转到该jsp,通过该j ...