兄弟连区块链技术培训分享Go语言之时间编程

栏目: Go · 发布时间: 5年前

内容简介:互联网二十多年,已到十字路口。区块链出现前的互联网被称为古典互联网,而应用区块链技术的互联网才进入了后互联网时代。作为一项新兴的技术,区块链无疑正处于风口浪尖之上,其发展前景于普通大众而言也终将是利好。但目前由于区块链技术处于发展早期阶段,存在技术成熟度、落地应用场景有限等问题,兄弟连教育建议用户在选择专业编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔,本文简单的讲讲go的时间相关的编程,比较简单。golang对时间的支持,是package time做的事

互联网二十多年,已到十字路口。区块链出现前的互联网被称为古典互联网,而应用区块链技术的互联网才进入了后互联网时代。作为一项新兴的技术,区块链无疑正处于风口浪尖之上,其发展前景于普通大众而言也终将是利好。但目前由于区块链技术处于发展早期阶段,存在技术成熟度、落地应用场景有限等问题,兄弟连教育建议用户在选择专业 Go语言 + 区块链培训 机构前应进行仔细考量与辨别。

编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔,本文简单的讲讲 go 的时间相关的编程,比较简单。

golang对时间的支持,是package time做的事儿,里面有好多的函数。

熟悉 Linux 下C编程的就是time函数的返回值:

#include

time_t now = time(NULL);

golang中一个很重要的表征时间的数据类型是Time,基本就是三个成员变量 sec ,nsec,Location,详细意思可以参看注释。

type Time struct {

// sec gives the number of seconds elapsed since

// January 1, year 1 00:00:00 UTC.

sec int64

// nsec specifies a non-negative nanosecond

// offset within the second named by Seconds.

// It must be in the range [0, 999999999].

nsec int32

// loc specifies the Location that should be used to

// determine the minute, hour, month, day, and year

// that correspond to this Time.

// Only the zero Time has a nil Location.

// In that case it is interpreted to mean UTC.

loc *Location

}

OK,如何取到UNIX epoch time.

now := time.Now()

用time package中Now()函数获取到当前的时间信息,Now()函数非常的重要,他是后面一切转换的起始点。从Now()我们获取到了Time,从Time类型我们从容的获取到UNIX epoch time ,自然获取到year ,month ,day,weekday, hour,minute,second,nanosecond.

获取UNIX epoch time:

var epoch_seconds int64 = now.Unix()

获取Year

func (t Time) Year() int

cur_year := now.Year()

获取Month

func (t Time) Month() Month

cur_month := now.Month()

if cur_month == time.November {

...

}

Month是int类型,fmt.Printf("%v") 或者fmt.Println可以打印出November来,同时Month type有String()函数,输出“November”这样的字符串

const (

January Month = 1 + iota

February

March

April

May

June

July

August

September

October

November

December

)

year mon day,这些都可以在Date函数中一并返回:

func (t Time) Date() (year int, month Month, day int)

year,mon,day = now.Date()

获取Hour

func (t Time) Hour() int

cur_hour := now.Hour()

Minute可以通过Minute()返回,second可以通过Second()返回。

time还提供了Clock()的同时返回 hour,minute,second = now.Clock().

golang的版本是:

package main

import "fmt"

import "time"

func main(){

now := time.Now()

year,mon,day := now.UTC().Date()

hour,min,sec := now.UTC().Clock()

zone,_ := now.UTC().Zone()

fmt.Printf("UTC time is %d-%d-%d %02d:%02d:%02d %s\n",

year,mon,day,hour,min,sec,zone)

year,mon,day = now.Date()

hour,min,sec = now.Clock()

zone,_ = now.Zone()

fmt.Printf("local time is %d-%d-%d %02d:%02d:%02d %s\n",

year,mon,day,hour,min,sec,zone)

}

go版本的输出

---------------------

UTC   time is 2013-11-22 15:51:22 UTC

local time is 2013-11-22 23:51:22 CST

-------------------------------------------------------------------------------------------------------------------------------------------------------------

我们另一个关心的话题,是时间间隔,比如我们profile一个以非常耗时的function,我们会在函数开始前记下时刻值,函数结束后,再次记录下时刻值,然后两者的差值,就是函数运行时间。

这表明Time是可以相减的,

start_time := time.Now()

expensive_function

end_time :=time.Now()

var duration Duration = end_time.Sub(start_time)

Duration是一种数据类型,其实是个int64类型,表征的是两个时刻之间的纳秒数。

type Duration int64

const (

Nanosecond Duration = 1

Microsecond = 1000 * Nanosecond

Millisecond = 1000 * Microsecond

Second = 1000 * Millisecond

Minute = 60 * Second

Hour = 60 * Minute

)

Duration类型有Minutes()/Second()/Nanoseconds(), 将duration折算成分钟/秒/纳秒。

now := time.Now()

time.Sleep(3*time.Second);

end_time := time.Now()

var dur_time time.Duration = end_time.Sub(now)

var elapsed_min float64 = dur_time.Minutes()

var elapsed_sec float64 = dur_time.Seconds()

var elapsed_nano int64 = dur_time.Nanoseconds()

fmt.Printf("elasped %f minutes or \nelapsed %f seconds or \nelapsed %d nanoseconds\n",

elapsed_min,elapsed_sec,elapsed_nano)

输出如下:

elasped 0.050005 minutes or

elapsed 3.000292 seconds or

elapsed 3000292435 nanoseconds

------------------------------------------------------------------------------------------------------------------------------------------------

第二部分描述Duration明显用到了Sleep()函数,这个函数是以纳秒为单位的,相当于 C语言 中的nanosleep()

#include

nanosleep(): _POSIX_C_SOURCE >= 199309L

int nanosleep(const struct timespec *req, struct timespec *rem);

#include

unsigned int sleep(unsigned int seconds);

Go中的time.Sleep一律是以纳秒为单位的,当然本质是Duration类型:

如果sleep 3秒中需要写成:

time.Sleep(3000000000)

这太不方便了,所以,Golang可以写成

time.Sleep(3*time.Second);

高能预警,兄弟连教育区块链直播课程8月持续火爆来袭!

原价1188元的12节区块链进阶课程,现仅需1元!

还可免费领取《Go语言基础实战项目开发》与《Go语言高级实战项目开发》教材两本!!限时限量!!先到先得!!

http://www.ydma.cn/open/course/24

兄弟连区块链技术培训分享Go语言之时间编程

关注兄弟连区块链技术公众号领取更多技术干货哦!!! 

兄弟连区块链技术培训分享Go语言之时间编程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

密码学原理与实践

密码学原理与实践

[加]Douglas R.Stinson / 冯登国 / 电子工业出版社 / 2009年 / 55.00元

冯登国(FENG Dengguo,1965.5~), 现为中国科学院软件所研究员、博士生导师,信息安全国家重点实验室主任,国家计算机网络入侵防范中心主任,国家信息化专家咨询委员会委员。目前主要从事信息与网络安全方面的研究与开发工作。一起来看看 《密码学原理与实践》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码