Go语言标准库之time

时间的格式化和解析

  • 格式化 Format

    Go语言和其他语言的时间格式化的方式不同,Go语言格式化的方式更直观,其他的语言一般是yyyy-mm-dd
package main

import (
"fmt"
"time"
) func main() {
now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05"))
fmt.Println(now.Format("2006/01/02 15:04:05"))
fmt.Println(now.Format("2006年01月02日 15:04:05"))
}

输出结果是

2019-01-01 10:45:502019/01/01 10:45:50
2019年01月01日 10:45:50

在系统中还提供了一些默认的格式

   ANSIC       = "Mon Jan _2 15:04:05 2006"
UnixDate = "Mon Jan _2 15:04:05 MST 2006"
RubyDate = "Mon Jan 02 15:04:05 -0700 2006"
RFC822 = "02 Jan 06 15:04 MST"
RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
RFC3339 = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
Kitchen = "3:04PM"
// Handy time stamps.
Stamp = "Jan _2 15:04:05"
StampMilli = "Jan _2 15:04:05.000"
StampMicro = "Jan _2 15:04:05.000000"
StampNano = "Jan _2 15:04:05.000000000"

使用方法:

fmt.Println(now.Format(time.RFC3339))
  • 解析 Parse
func Parse(layout, value string) (Time, error)
t1, err := time.Parse("2006-01-02 15:04:05", "2019-01-01 10:54:11")
t2, err := time.Parse("2006/01/02 15:04:05", "2019/01/01 10:54:59")
t3, err := time.Parse("2006年01月02日 15:04:05", "2019年01月01日 10:54:59")
if err != nil {
log.Fatal(err)
}
fmt.Println(t1)
fmt.Println(t2)
fmt.Println(t3)

输出结果是

2019-01-01 10:54:11 +0000 UTC
2019-01-01 10:54:59 +0000 UTC
2019-01-01 10:54:59 +0000 UTC

获取时间戳

使用time.Nowtime.Unixtime.UnixNano方法获取对应的时间戳

sec := now.Unix()      //秒
nsec := now.UnixNano() //纳秒
fmt.Println(sec)
fmt.Println(nsec)

输出结果

1537498785
1537498785523262700
  • 解析时间戳

    根据时间戳获取当前时间
t := time.Unix(sec, 0)
fmt.Println(t)
fmt.Println(t.Format("2006-01-02 15:04:05"))

输出结果

2019-01-01 11:05:30 +0800 CST
2019-01-01 11:06:43

获取当前的日期和时间

year, month, day := now.Date()
fmt.Println(year, month, day)
fmt.Println(year, int(month), day)
fmt.Printf("year:%d month:%d day:%d", year, month, day)
hour, minute, second := now.Clock()
fmt.Println(hour, minute, second)

输出结果

2019 January 1
2019 1 1
year:2019 month:1 day:1
11 11 34

关于星期

weekday := now.Weekday()
fmt.Println(weekday) // Friday
fmt.Println(int(weekday)) //5

输出结果

Friday
5

星期日是0

计算已经过去了多少天

days := now.YearDay()
fmt.Println(days)

输出结果

264

计算两个日期的时间差

date1 := time.Date(2017, time.Month(1), 1, 0, 0, 0, 0, time.UTC)
date2 := time.Date(2018, time.Month(1), 1, 0, 0, 0, 0, time.UTC)
hours := date2.Sub(date1).Hours()
fmt.Println(hours)
between_days := hours / 24
fmt.Println(between_days)

输出结果

8760
365

获取月份中的天数

time.Day()方法是获取本月之前过去的天数,获取月份中天数,初始化时天设置为0,就是获取上月的天数,

月数+1就可以获取本月的天数

month_days := time.Date(now.Year(), now.Month() + 1, 0, 0, 0, 0, 0, time.UTC).Day()
fmt.Println(month_days)

计算执行的时间

start := time.Now()  //程序执行开始
//.... 程序代码
duration := time.Since(start) //执行结束
fmt.Println(duration)
fmt.Println(duration.Nanoseconds())

输出结果

18.9889ms
18988900

Go语言标准库之time的更多相关文章

  1. 附录二 C语言标准库

    上章回顾 数组和指针相同与不同 通过指针访问数组和通过数组访问指针 指针在什么时候可以加减运算 函数指针的申明和调用 函数数组和数组函数 git@github.com:Kevin-Dfg/Data-S ...

  2. Go语言标准库_输入/输出

    Go语言标准库_输入/输出 转载节选自<Go语言标准库> Reader 接口 type Reader interface { Read(p []byte) (n int, err erro ...

  3. GO语言标准库—命令行参数解析FLAG

    flag包是Go语言标准库提供用来解析命令行参数的包,使得开发命令行工具更为简单 常用方法 1.flag.Usage 输出使用方法,如linux下ls -h的帮助输出 2.flag.Type(参数名, ...

  4. Go语言标准库之JSON编解码

    Go语言标准库之JSON编解码 基本的类型 Go语言中的数据类型和JSON的数据类型的关系 bool -> JSON boolean float64 -> JSON numbers str ...

  5. C语言标准库之setjmp

    协程的介绍 协程(coroutine),意思就是“协作的例程”(co-operative routines),最早由Melvin Conway在1963年提出并实现.跟主流程序语言中的线程不一样,线程 ...

  6. C语言标准库 qsort bsearch 源码实现

    C语言是简洁的强大的,当然也有很多坑.C语言也是有点业界良心的,至少它实现了2个最最常用的算法:快速排序和二分查找. 我们知道,对于C语言标准库 qsort和 bsearch: a. 它是“泛型”的, ...

  7. Go语言标准库flag基本使用

    文章引用自   Go语言标准库flag基本使用 os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数. package main import ...

  8. Go语言标准库log介绍

    Go语言标准库log介绍 无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯. log Go语言内置的log包实现了简单的日志服 ...

  9. &lt;ctype.h&gt; C语言标准库

    ctype.h是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于測试字符是否属于特定的字符类别.如字母字符.控制字 ...

随机推荐

  1. 亿级 ELK 日志平台构建部署实践

    本篇主要讲工作中的真实经历,我们怎么打造亿级日志平台,同时手把手教大家建立起这样一套亿级 ELK 系统.日志平台具体发展历程可以参考上篇 「从 ELK 到 EFK 演进」 废话不多说,老司机们座好了, ...

  2. 用归并排序或树状数组求逆序对数量 poj2299

    题目链接:https://vjudge.net/problem/POJ-2299 推荐讲解树状数组的博客:https://blog.csdn.net/int64ago/article/details/ ...

  3. C++ 获取字符串中的所有汉字

    #include<iostream> using namespace std; int main() {    char str[20] = "cd大家好df";   ...

  4. Python类继承(转发)

    目录 一.概述 二.类的继承 2.1 继承的定义 2.2 构造函数的继承 2.3 子类对父类方法的重写 三.类继承的事例 回到顶部 一.概述 面向对象编程 (OOP) 语言的一个主要功能就是“继承”. ...

  5. 关于@autoreleasepool

    苹果推荐使用场景: 如果你编写的程序不是基于 UI 框架的,比如说命令行工具: 如果你编写的循环中创建了大量的临时对象:(常用) 如果你创建了一个辅助线程. @interface ViewContro ...

  6. RHCS(概念篇)

    一. 什么是RHCS RHCS是Red Hat Cluster Suite的缩写,也就是红帽子集群套件,RHCS是一个能够提供高可用性.高可靠性.负载均衡.存储共享且经济廉价的集群工具集合,它将集群系 ...

  7. Pycharm中选择Python解释器

    新建项目后,有时候Pycharm找不到Python解释器,如果找不到的话,就会报错.报错信息: No python interpreter configured for the project 找到P ...

  8. 【转载】Sql Server参数化查询之where in和like实现详解

    文章导读 拼SQL实现where in查询 使用CHARINDEX或like实现where in 参数化 使用exec动态执行SQl实现where in 参数化 为每一个参数生成一个参数实现where ...

  9. 2,postman的tests的断言写法

    tests的断言主要是分为三类 状态码,header内容和波body内容的测试,波body的不常用( 不容易控制) pm.expect(pm.response).to.have.status(&quo ...

  10. ABP 异常处理 第四篇

    1.ABP异常处理机制是通过过滤器实现的,我们查看的webAPI的异常处理,我们来看看他的源码,AbpApiExceptionFilterAttribute 继承ExceptionFilterAttr ...