DAY5 GOLANG(五)关于时间的函数

aside section._1OhGeD · · 760 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

时间和日期的相关函数

1)时间和日期函数

now :=time.Now()    //获取当前时间,可以通过now获取当前时间的年月日,时分秒

fmt.Printf("now=%v \nnow type=%T\n",now,now)

fmt.Printf("年=%v\n",now.Year())

fmt.Printf("月=%v\n",now.Month())

fmt.Printf("月=%v\n",int (now.Month()))   //外面加一个int,把输出转换为整型

fmt.Printf("日=%v\n",now.Day())

fmt.Printf("时=%v\n",now.Hour())

fmt.Printf("分=%v\n",now.Minute())

fmt.Printf("秒=%v\n",now.Second())


结果:

now=2019-10-31 09:36:09.1612018 +0800 CST m=+0.002018701

now type=time.Time

年=2019

月=October

月=10

日=31

时=9

分=36

秒=9


格式化日期和时间

法一:使用Printf 或 SPrintf

1)直接用Printf格式化输出

fmt.Printf ("当前年月日 %d-%d-%d %d:%d:%d \n",now.Year(),now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second())

结果:

当前年月日 2019-10-31 10:2:42

2)使用fmt.Sprintf语句赋值给变量,输出变量

dateStr :=fmt.Sprintf("当前年月日 %d-%d-%d %d:%d:%d \n",now.Year(), now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second())

fmt.Printf("dataStr=%v\n",dateStr)

结果:

dataStr=当前年月日 2019-10-31 10:2:42

法二: 使用 time.Format()

fmt.Printf(now.Format("2006-01-02 15:04:05"))       //now.Format  ("2006-01-02 15:04:05")( 写死了,数字不能改变,否则出错)

fmt.Println()

fmt.Printf(now.Format("2006-01-02"))       //格式为年月日,输出就为年月日;格式为年月,输出为年月

fmt.Println()

fmt.Println(now.Format("15:04:05"))


结果

2019-10-31 10:38:20

2019-10-31

10:38:20


Unix 和 UnixNano

Unix和Unixnano,可用于获取随机数字,

两者均为1970年1月1日到今天的时间戳,Unix为x秒数,UnixNano为纳秒数


可利用两点时间戳相减计算某一函数执行的时间,实例如下:

func test03(){

str :=""

  for i :=0; i<100000; i++{

str +="hello" +strconv.Itoa(i)

}

}

func main(){

start :=time.Now().Unix()

test03()

end :=time.Now().Unix()

fmt.Printf("执行test03()耗费时间为%v秒\n",end-start)     // 通过end—start来计算test03的执行时间

}


结果是:

执行test03()耗费时间为5秒



利用sleep函数可以获取指定时间单位的时间

实例:

每隔0.1秒中打印一个数字,打印到100时退出

func main(){

i :=0

  for  {

i ++

fmt.Println(i)

time.Sleep(time.Millisecond*100)      // 时间为每间隔0.1秒执行一次循环

if i ==100 {

break

      }

}

}



内置函数

len()

new():用来分配内存-----------*int

make(): 给引用类型分配内存


new用来分配内存,主要用来分配值类型,返回的是指针

num1 :=100

fmt.Printf("num1的类型%T\n num1的值=%v\n num1的地址%v\n",num1,num1,&num1)

num2 :=new(int)

*num2 =100

fmt.Printf("num2的类型%T\n num2的值=%v\n num2的地址%v\n num2指向的值=%v",num2,num2,&num2,*num2)

结果:

num1的类型int

num1的值=100

num1的地址0xc00000a0c8

num2的类型*int                        //通过new转换之后,值的类型变成了指针

num2的值=0xc00000a110        //值变成了地址

num2的地址0xc000006030      

num2指向的值=100      


原来

num1------>0xc00000a0c8 (100)

现在

num2------>0xc00000a110-------->0xc000006030(100)


错误处理

Go中错误处理机制,defer,panic,recover

Go中抛出一个panic的异常,然后在defer中通过recover捕获这个异常。

在默认情况下当发生错误时程序就退出来

引出错误处理:defer    panic  recover = go中可以抛出一个panic的异常,然后在defer 中通过recover捕获这个异常,然后正常处理

err:=recover()



1 排序和查找

排序

将一组数据以指定的顺序进行排序

冒泡排序

经过arr.length - 1 次的轮数,每一轮的次数逐渐减少,前面的数比后面的大时进行交换

for i:=0; i<len (*arr)-1;i++{

for j: =0;j<len(*arr)-1 -i ;j++{

if (arr)[j] > (arr)[j+1]{

//交换

temp = (*arr)[j]

(arr)[j] = (arr)[ j +1]

(*arr)[j+1]=temp

}

}

}

查找

顺序查找(for循环),可以先定义一个index = -1,每次循环如果找到就将i赋给index

二分法查找(前提是已经排好序的)

先找到中间的下标middle=(leftindex+rightindex)/2,然后跟目标数进行比较

if leftindex>rightindex {

找不到

return

}

func  index(arr *[6]int,leftindex int ,rightindex int ,findvalue int)

middle := (leftindex+rightindex)/2

if (*arr)[middle] > findvalue{

index(arr,leftindex,middle-1,findvalue)

}else if  (*arr)[middle] < findvalue{

index(arr,middle+1,righetindex,findvalue)

}else{

找到了,下标就是middle

}


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section._1OhGeD

查看原文:DAY5 GOLANG(五)关于时间的函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

760 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传