Go语言标准库之time
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.Now
的time.Unix
和time.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的更多相关文章
- 附录二 C语言标准库
上章回顾 数组和指针相同与不同 通过指针访问数组和通过数组访问指针 指针在什么时候可以加减运算 函数指针的申明和调用 函数数组和数组函数 git@github.com:Kevin-Dfg/Data-S ...
- Go语言标准库_输入/输出
Go语言标准库_输入/输出 转载节选自<Go语言标准库> Reader 接口 type Reader interface { Read(p []byte) (n int, err erro ...
- GO语言标准库—命令行参数解析FLAG
flag包是Go语言标准库提供用来解析命令行参数的包,使得开发命令行工具更为简单 常用方法 1.flag.Usage 输出使用方法,如linux下ls -h的帮助输出 2.flag.Type(参数名, ...
- Go语言标准库之JSON编解码
Go语言标准库之JSON编解码 基本的类型 Go语言中的数据类型和JSON的数据类型的关系 bool -> JSON boolean float64 -> JSON numbers str ...
- C语言标准库之setjmp
协程的介绍 协程(coroutine),意思就是“协作的例程”(co-operative routines),最早由Melvin Conway在1963年提出并实现.跟主流程序语言中的线程不一样,线程 ...
- C语言标准库 qsort bsearch 源码实现
C语言是简洁的强大的,当然也有很多坑.C语言也是有点业界良心的,至少它实现了2个最最常用的算法:快速排序和二分查找. 我们知道,对于C语言标准库 qsort和 bsearch: a. 它是“泛型”的, ...
- Go语言标准库flag基本使用
文章引用自 Go语言标准库flag基本使用 os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数. package main import ...
- Go语言标准库log介绍
Go语言标准库log介绍 无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯. log Go语言内置的log包实现了简单的日志服 ...
- <ctype.h> C语言标准库
ctype.h是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于測试字符是否属于特定的字符类别.如字母字符.控制字 ...
随机推荐
- 2018面向对象程序设计(Java)第17周学习指导及要求
2018面向对象程序设计(Java)第17周学习指导及要求(2018.12.20-2018.12.23) 学习目标 (1) 掌握线程同步的概念及实现技术: (2) Java线程综合编程练习 学习资 ...
- Spring使用Jackson处理json数据
1.搭建SpringMVC+Spring环境 2.配置web.xml.SpringMVC-config.xml <?xml version="1.0" encoding=&q ...
- linux环境启动数据库
1.查看数据库监听的状态: 监听状态:lsnrctl status 出现如下列截图所示数据,说明切切换账户有问题:切换账户时要家:-: 如 su - oracle 第一步:打开Oracle监听$ ...
- springboot和mybatis之thymleaf整合简单插入用户数据
编写mapper接口和对应的mapper.xml文件,注意对应的注解 @Mapper @Repository public interface StudentMapper { void insertS ...
- 725. Split Linked List in Parts把链表分成长度不超过1的若干部分
[抄题]: Given a (singly) linked list with head node root, write a function to split the linked list in ...
- [leetcode]18. 4Sum四数之和
Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums s ...
- SSD性能测试第一神器:FIO
SSD性能测试第一神器:FIO 2017年8月12日 syswift 0 对于SSD性能测试来说,最好的工具莫过于FIO了. 上面这个可爱的小伙子名字叫Jens Axboe,他是丹麦哥本哈根大学计算 ...
- 20172325 2018-2019-2 《Java程序设计》第七周学习总结
20172325 2018-2019-2 <Java程序设计>第七周学习总结 教材学习内容总结 二叉查找树 二叉查找树:是含附加属性的二叉树,即其左孩子小于父节点,而父节点又小于或等于右孩 ...
- 2018上IEC计算机高级语言(C)作业 第1次作业
1.经过这几周的学习,总结一下学习的心得与体会.(不少于100字:10分) 学习c语言已经一个学期了,刚开始学习的时候老是感觉力不从心.虽然认真听课了, 但是并不能理解它.这种情况到了后来才有所改变. ...
- MySQL InnoDB配置并发线程( innodb_thread_concurrency)
http://www.ywnds.com/?p=9821 一.thread_concurrency 首先,最重要的一点,这个参数已经在最新版本的MySQL中被移除了,官方最新5.7版本的doc上面对t ...