一、时间和日期类型

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. checked多选,取消,反选

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 根据/proc/meminfo对空闲内存进行占用

    #include <stdio.h> #include <sys/sysinfo.h> #include <linux/kernel.h> /* 包含sysinfo ...

  3. php中使用array_reduce给数组降维

    PHP里面最强大的工具,就是数组,它融合了多种数据结构的特点,数组.队列.栈.哈希表等等,而且容器可以兼容各种类型,任意嵌套,简直无所不能.围绕着数组,PHP原生支持了一些列的函数,使得数组在实际编程 ...

  4. 第二部分 实习操作课程 第一节 ArcGIS Online的基本功能

  5. HDU 6395(2018多校第7场1010)Sequence

    不久前做过POJ3070,所以知道这题要用矩阵快速幂优化,但是这个题的递推公式中有一项⌊p/n⌋,场上就不会了... 下来才知道要用分块矩阵快速幂,因为⌊p/n⌋最多有2√p块,可以对每一块使用快速幂 ...

  6. Spring 框架学习 有用

    1.1.1 spring的优势 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合.用户也不必再为单例模式类.属性文件 ...

  7. Python程序设计3——字典

    1 字典 字典是Python唯一内建的映射类型.字典是键值对的集合. 1.1 字典的使用 某些情况下字典更加好用,比如一个电话列表.注意:电话号码只能用字符串数字表示,否则会出问题.因为电话号码一旦以 ...

  8. 别了,DjVu!

    作者:马健邮箱:stronghorse_mj@hotmail.com发布:2010.05.21 目录一.DjVu技术二.掌握DjVu技术的人三.玩DjVu的人四.小结跋:我与DjVu 谨以此文纪念与D ...

  9. 为PyCharm自动配置作者信息

    在团队开发中,需要在代码中编写一些项目信息或个人信息,如开发者.开发时间.项目名称等信息,以利于后期对项目修改和维护.如果每次都需要手动编写,费时费力.下面介绍如何自动在代码文件中自动生成这些信息. ...

  10. Js判断参数(String,Array,Object)是否为undefined或者值为空

    在一些前端控件要提交数据到服务器端的数据验证过程中,需要判断提交的数据是否为空.如果是普通表单的字符串数据,只需要在 trim 后判断 length 即可,而这里需要的数据可以是各种不同的类型,通过 ...