根据秒数获取时分秒_Go 使用time包获取时间戳与日期格式化

golang使用time包获取时间戳与日期格式化

在开发中,不论使用什么编辑语言,都离不开日期格式化处理。

先来熟悉几个时间的概念:

时区:全球划分为24个时区(东、西各12个时区)。规定英国(格林尼治天文台旧址)为中时区(零时区)。时间戳:即Unix时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。为什么是从1970年开始呢,因为Unix是20世纪70年代初(1970年)出现的一个操作系统。

GMT: 格林尼治标准时间。它以英国伦敦的格林尼治天文台的经线为0 度经线,将世界分为24 个时区。

UTC: 即协调世界时,又称世界统一时间、世界标准时间、国际协调时间。

 YYYY-MM-DD HH:mm:ss  YYYY-MM-DDTHH:mm:ss.sssZ

北京时间:北京位于时区的东八区,北京时间采用国际时区东八时区的区时作为标准时间。东八区(UTC/GMT+08:00)的时间比世界协调时间(UTC)/格林尼治时间(GMT)快8小时。

GMT vs UTC

GMT是前世界标准时,UTC是现世界标准时。UTC 比 GMT更精准,以原子时计时,适应现代社会的精确计时。在不需要精确到秒的情况下,二者可以视为等同。每年格林尼治天文台会发调时信息,基于UTC。

常见的时间格式

基本时间格式: 2020-12-24 18:53:33

UTC时间格式: 2020-12-24T10:53:33.776Z (ISO-8601)

Unix时间戳格式: 1606986993 (当前为10位数字)

MySQL datetime 时间格式: "2020-12-24 09:35:12" (同基本时间格式)

MongoDB 时间格式: ISODate("2020-12-24T09:35:12.227Z")

ISO-8601: 是ISO制定的日期和时间的表示方法。

比如:要表示北京时间 2004年5月3日下午5点30分8秒,可以写成 2004-05-03T17:30:08+08:0020040503T173008+08, 其中 +08:00 表示东八区。 

东八区(UTC/GMT+08:00)是比世界协调时间(UTC)/格林尼治时间(GMT)快8小时的时区,理论上的位置是位于东经112.5度至127.5度之间。 

为了简单的查看各个时间的不同,我们可以直接在浏览器中使用js查看一下。

js 使用 new Date().getTime()获取时间戳,返回值的单位是毫秒。

打开浏览器 console:

> new Date().getTime(); 1609932286639> new Date().toString()"Wed Jan 06 2021 19:25:00 GMT+0800 (中国标准时间)"> new Date().toISOString()"2021-01-06T11:25:10.220Z"> new Date().toGMTString()"Wed, 06 Jan 2021 11:25:17 GMT"> new Date().toUTCString()"Wed, 06 Jan 2021 11:25:24 GMT"

Time包定义的类型

在 go 语言中,使用 package time 包来处理时间。

Time: 时间类型, 包含了秒和纳秒以及 Location

Month: type Month int 月份.

定义了十二个月的常量

const (    January Month = 1 + iota    February    March    April    May    June    July    August    September    October    November    December)

Weekday 类型: type Weekday int 周

定义了一周的七天

const (    Sunday Weekday = iota    Monday    Tuesday    Wednesday    Thursday    Friday    Saturday)

Duration:type Duration int64 持续时间.

定义了以下持续时间类型.多用于时间的加减 需要传入Duration做为参数的时候. 可以直接传入 time.Second

const (    Nanosecond  Duration = 1    Microsecond          = 1000 * Nanosecond    Millisecond          = 1000 * Microsecond    Second               = 1000 * Millisecond    Minute               = 60 * Second    Hour                 = 60 * Minute)

Location

在time包里有两个时区变量:

time.UTC utc时间 time.Local 本地时间

更多包文档可以参考 https://pkg.go.dev/time

时间格式化

时间格式 Time:

package mainimport (  "fmt"  "time")func main() {fmt.Println(time.Now()) // 输出: 2021-01-06 19:28:11.962027 +0800 CST m=+0.000094155fmt.Println(time.Now().String()) // 输出: 2021-01-06 19:28:11.962229 +0800 CST m=+0.000296130}

获取当前时间戳:

// 获取当前unix时间戳(秒)fmt.Println(time.Now().Unix()) // 输出: 1609932625// 获取当前unix时间戳(毫秒)fmt.Println(time.Now().UnixNano() / 1e6) // 输出: 1609932625691// 获取当前unix时间戳(纳秒)fmt.Println(time.Now().UnixNano()) // 输出: 1609932625691889000

字符串转化成时间戳:

x := "2018-12-27 18:44:55"p, _ := time.Parse("2006-01-02 15:04:05", x)fmt.Println( p.Unix() ) // 输出: 1545936295

将当前时间转成年月日时分秒格式:

t = time.Now()fmt.Println(t.Format("2006-01-02"))          // 输出: 2019-04-30fmt.Println(t.Format("2006-01-02 15:04:05")) // 输出: 2019-04-30 14:43:26fmt.Println(t.Format("2006-01-02 00:00:00")) // 输出: 2019-04-30 00:00:00fmt.Println(t.Format("2006/01/02 15:04"))    // 输出: 2019-04-30 14:43fmt.Println(t.Format("2006/Jan/02 15:04"))   // 输出: 2019/Apr/30 17:28// 指定时间t2 := time.Date(2019, time.November, 28, 11, 35, 46, 0, time.UTC) // 返回 Time 类型fmt.Printf("=>日期格式: %s\n", t2.Format("06/01/02 15:04:05"))   // 输出: =>日期格式: 19/11/28 11:35:46

注意:

比如在PHP中,我们使用 date('Y-m-d H:i:s', time()) 可以输出时间 “2019-04-30 14:43:26”。

比如Java里的 “new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")”。

但是在Go语言中,“Y-m-d H:i:s”、 “yyyy-MM-dd HH:mm:ss”为特定的数字。为啥是固定的数值呢,因为 “2006-01-02 15:04:05” 是Go语言的创建时间,且必须为这几个准确的数字。

使用 time.Now().Date() 获取年月日:

// Date()返回三个参数: 年月日
year1, month1, day1 := time.Now().Date()
fmt.Printf("year: %v, type: %T \n", year1, year1)
// 输出: year: 2019, type: int
fmt.Printf("month: %v, type: %T \n", month1, month1)
// 输出: month: April, type: time.Month
fmt.Printf("day: %v, type: %T \n", day1, day1)
// 输出: day: 30, type: int

Reference

https://golang.google.cn/pkg/time/   https://baike.baidu.com/item/ISO%208601/3910715   [END] 85b39242b63aee996c30c01b72d00665.gif精选阅读

Go语言环境安装与第一个HelloWorld程序

Golang依赖管理工具之go module

Golang Web框架 Echo 入门实践

PHP7使用 mongodb 扩展实现简单的增、删、改、查操作

安装 PHP7 的 MongoDB 驱动扩展

Lumen / Laravel 5 使用网易邮箱 SMTP 发送邮件

在多版本php环境,指定composer使用的php版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值