一、时间和日期类型

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. Angular04 组件动态地从外部接收值、在组件中使用组件

    一.组件从外部接收值 1 修改组件的ts文件,让组件的属性可以从外部接收值 1.1 导入Input注解对象 1.2 在属性变量前面添加 @Input() 注解 1.3 去掉构造器中的属性变量赋值语句 ...

  2. Condition实现一个生产者一个消费者

    Condition实现一个生产者一个消费者,实现一对一交替打印: import java.util.concurrent.locks.Condition; import java.util.concu ...

  3. JAVA语法规则总结

    单继承多实现 抽象类  抽象方法 使用关键字:abstract修饰的方法就是抽象方法; 抽象方法的形式:只有方法的声明,没有方法体; 抽象方法一般存在于父类中,相当于强制要求子类必须重写该方法,相当于 ...

  4. IFC—IfcProduct实体继承框架

  5. poj3420 Quad Tiling

    传送门 题目大意 问讲一个大小为4*n的棋盘用无数1*2的骨牌不重叠覆盖有多少种方案. 分析 我们考虑可以将长为n的棋盘分为两块,一个大小为n-i,另一个大小为i,而为了避免对于不同的i构造出相同的情 ...

  6. CF 464E The Classic Problem

    补一补之前听课时候的题. 考虑使用dij算法求最短路,因为边权存不下,所以考虑用主席树维护二进制位,因为每一次都只会在一个位置进行修改,所以可以暴力进位,这样均摊复杂度是对的. <算法导论> ...

  7. vue 之 箭头函数与对象的单体模式

    箭头函数 基本语法: ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; } 如果箭头函数不需 ...

  8. 【android】shape的使用

    例子:XML 文件保存在 res/drawable/gradient_box.xml: <?xml version="1.0" encoding="utf-8&qu ...

  9. sqlserver小批量导数据

     USE [KM_Voice]  GO  /****** Object: StoredProcedure [dbo].[proc_insert] Script Date: 01/09/2015 18: ...

  10. VB.NET提取TXT文档指定内容

    今天有浏览论坛时,又看见一篇是读取TXT文本文件的论题.Insus.NET也想以自己的想法来实现,并分享于此. 文本文件是比较复杂,获取数据也是一些文本行中取其中一部分.为了能够取到较精准的数据,In ...