golang time.Time 时间格式 format 布局字符 layout 整理

go语言中的时间格式字符串和我们常见的其他语言不太一样, 他的格式化字符串是一个时间,即2006-01-02 15:04:05 , 细心的你可能会发现,这个是一个很特别的时间, 他的每一段都是唯一的,这个特别的时间的格式和我们常见的其他语言中的时间格式字符串 Y-m-d H:i:s  的效果是一样的。

go语言中的时间格式布局字符串的组成部分的摘要

年:  "2006" "06"    这里年份的2种表示 2006表示4位年份, 06表示2位年份

月份:  "Jan" "January" "01" "1"     注意这里的代表月份的时间布局 有英文也有数字

星期几:  "Mon" "Monday"

一个月的哪一天:  "2" "_2" "02"

一年中的哪一天:   "__2" "002"

时:   "15" "3" "03" (PM or AM)

分:   "4" "04"

秒:   "5" "05"

AM/PM标记:  "PM"

数字时区偏移格式如下:

"-0700" ±hhmm

"-07:00" ±hh:mm

"-07" ±hh

"-070000" ±hhmmss

"-07:00:00" ±hh:mm:ss

time包中内置的时间格式常量

对于下面这些时间格式,我们直接 time.XXX 即可调用,不需要自己写

const (Layout      = "01/02 03:04:05PM '06 -0700" // The reference time, in numerical order.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 zoneRFC850      = "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 zoneRFC3339     = "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"DateTime   = "2006-01-02 15:04:05"DateOnly   = "2006-01-02"TimeOnly   = "15:04:05"
)

以下是时间格式布局的一些内置常量参考,  可以注意看后面的注释,这里就是go语言中对时间格式布局元素的所有拆分和其代表的意义。


const (_                        = iotastdLongMonth             = iota + stdNeedDate  // "January"stdMonth                                       // "Jan"stdNumMonth                                    // "1"stdZeroMonth                                   // "01"stdLongWeekDay                                 // "Monday"stdWeekDay                                     // "Mon"stdDay                                         // "2"stdUnderDay                                    // "_2"stdZeroDay                                     // "02"stdUnderYearDay                                // "__2"stdZeroYearDay                                 // "002"stdHour                  = iota + stdNeedClock // "15"stdHour12                                      // "3"stdZeroHour12                                  // "03"stdMinute                                      // "4"stdZeroMinute                                  // "04"stdSecond                                      // "5"stdZeroSecond                                  // "05"stdLongYear              = iota + stdNeedDate  // "2006"stdYear                                        // "06"stdPM                    = iota + stdNeedClock // "PM"stdpm                                          // "pm"stdTZ                    = iota                // "MST"stdISO8601TZ                                   // "Z0700"  // prints Z for UTCstdISO8601SecondsTZ                            // "Z070000"stdISO8601ShortTZ                              // "Z07"stdISO8601ColonTZ                              // "Z07:00" // prints Z for UTCstdISO8601ColonSecondsTZ                       // "Z07:00:00"stdNumTZ                                       // "-0700"  // always numericstdNumSecondsTz                                // "-070000"stdNumShortTZ                                  // "-07"    // always numericstdNumColonTZ                                  // "-07:00" // always numericstdNumColonSecondsTZ                           // "-07:00:00"stdFracSecond0                                 // ".0", ".00", ... , trailing zeros includedstdFracSecond9                                 // ".9", ".99", ..., trailing zeros omittedstdNeedDate       = 1 << 8             // need month, day, yearstdNeedClock      = 2 << 8             // need hour, minute, secondstdArgShift       = 16                 // extra argument in high bits, above low stdArgShiftstdSeparatorShift = 28                 // extra argument in high 4 bits for fractional second separatorsstdMask           = 1<<stdArgShift - 1 // mask out argument
)

字符串到Time时间解析函数 Parse参考:

func Parse(layout, value string) (Time, error) {// Optimize for RFC3339 as it accounts for over half of all representations.if layout == RFC3339 || layout == RFC3339Nano {if t, ok := parseRFC3339(value, Local); ok {return t, nil}}return parse(layout, value, UTC, Local)
}

使用示例: 

如我们有时间字符串  2024-06-27 21:09:58  要将他转换为时间对象,我们就可以使用Parse函数来实现, 因为这个时间格式time包里面已经给我们定义了常量time.DateTime 我们直接使用即可

dtstr:="2024-06-27 21:12:46"
dt,err:= time.Parse(time.DateTime,dtstr)
if err != nil {log.Fatalf("时间解析失败, %v", err)
}
// 这里 dt就是时间对象了,我们就可以使用他里面的所有方法了

另外一个混编的时间格式转换示例, 即在时间格式里面有英文也有数字的时间格式。

dstr := "07 Feb, 2024"
// 注意这里的时间格式"07 Feb, 2024", 是混编的 即有英文也有数字
// 我们的layout也需要混编, Jan 这个是1月的意思,对应layout中的 01, 这里的 Jan 即表示用英文来表示月份, 而02表示的是数字的日期
dt, _ = time.Parse("02 Jan, 2006", dstr)

对应这种混编的时间格式, 我们在转换的时候也需要对应的使用混编的时间布局格式元素

数字时间戳到时间对象的转换

这个有3个函数可用,根据你的数字时间的精度来选择

time.Unix(sec int64, nsec int64) time.Time   这个是纳秒数字时间到时间对象的转换函数,第一个参数 sec为数字秒, 第二个为纳秒

time.UnixMicro(usec int64) time.Time    这个是微秒数字时间到时间对象的转换函数

time.UnixMilli(msec int64) time.Time 这个是毫秒数字时间到时间对象的转换函数

时间对象到字符串的转换

这个比较简单,直接使用 Format方法即可,关键是需要掌握上面的时间布局格式的使用.

Format方法原型: func (t Time) Format(layout string) string

示例,将时间对象 dt 转换为 RFC3339 格式的字符串,即  "2006-01-02T15:04:05Z07:00"

dt:= time.Now()
str:=dt.Format(time.RFC3339)

其他

go语言的时间使用,重点就是时间格式布局,其他的时间运算很简单,官方给出了很多的使用示例和函数说明,参考官方手册即可, time package - time - Go Packages

当然,你也可以直接在命令行执行  go doc Time 查看time相关的文档。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ChatMemory打造AI取名大师

当我们真正开发一款应用时&#xff0c;存储用户与大模型的历史对话是非常重要的&#xff0c;因为大模型需要利用到这些历史对话来理解用户最近一句话到底是什么意思。 比如你跟大模型说“换一个”&#xff0c;如果大模型不基于历史对话来分析&#xff0c;那么大模型根本就不知…

恭喜!Z医生喜提世界名校—斯坦福大学访问学者邀请函

➡️【院校简介】 斯坦福大学&#xff08;Stanford University&#xff09;&#xff0c;全称为小利兰斯坦福大学&#xff0c;简称“斯坦福”&#xff0c;位于美国加州旧金山湾区南部帕罗奥多市境内&#xff0c;临近高科技园区硅谷&#xff0c;是私立研究型大学&#xff0c;全球…

HarmonyOS Next开发学习手册——内存管理(GC)

GC&#xff08;全称 Garbage Collection&#xff09;&#xff0c;即垃圾回收。在计算机领域&#xff0c;GC就是找到内存中的垃圾&#xff0c;释放和回收内存空间。当前主流编程语言实现的GC算法主要分为两大类&#xff1a;引用计数和对象追踪&#xff08;即Tracing GC&#xff…

threejs的学习(二)

上次我们说了如何搭建环境&#xff0c;并成功显示了一个静止的方块&#xff0c; 1.通过轨道控制器查看方块&#xff0c;同时添加坐标轴辅助器 main.js import * as THREE from "../assets/js/three.module"; import { OrbitControls } from "../../../three.j…

零拷贝技术(zero copy),DMA,mmap,sendfile

在一些高性能的IO场景下我们经常能听到零拷贝技术&#xff0c;这是个不错的话题。 零拷贝指的是内核态与用户态之间的数据拷贝&#xff0c;而这两个区域的数据拷贝只能依靠CPU&#xff0c;但是CPU最重要的作用应该是运算。 一、DMA的由来 在没有DMA之前&#xff0c;磁盘的IO…

全国211大学名单及排名

序号 名称 省份 985 211 双一流 1 北京大学 北京 是 是 是 2 清华大学 北京 是 是 是 3 复旦大学 上海 是 是 是 4 上海交通大学 上海 是 是 是 5 浙江大学 浙江 是 是 是 6 国防科技大学 湖南 是 是 是 7 中国人民大学 北京 是 …

Vue.js中的虚拟DOM

一.节点和状态 在我们平常对DOM操作的时候,之前在vue没有诞生之前,以命令式的方式对DOM进行操作,页面上的每一个元素都可以看做成一个节点状态。 二.剔除和渲染 框架都有自己渲染的方式,假设一个页面的状态,随着Ajax请求的放松,状态发生改变,有以下的两种方式供你选择&#…

C语言 do while循环练习 上

do while循环 do循环语句; while&#xff08;表达式&#xff09;; 例&#xff1a; do while里的break do while里的continue 练习 1.计算n的阶乘 1*2*3*424 2.计算1&#xff01;2&#xff01;3&#xff01;.......10! 3.在一个有序数组中查找具体的某个数字h&#x…

吴恩达AI系列:教你如何用Langchain封装一本书

教你快速上手AI应用——吴恩达AI系列教程 人工智能风靡全球,它的应用已经渗透到我们生活的方方面面,从自动驾驶到智能家居,再到医疗辅助和量化交易等等。他们逐渐改变了我们的生活方式,然而,对于许多人来说,AI仍然是一个神秘且无法理解的领域。 为了帮助更多的人理解并掌握AI…

一篇文章带你彻底搞懂十大经典排序之——快速排序

一、递归实现快速排序 1.基本思想 通过一趟排序将待排序记录分割成独立的两部分&#xff0c;其中一部分记录的关键字均比两一部分的关键字小&#xff0c;则课分别对这两部分记录继续进行排序&#xff0c;已达到整个序列有序。 2.算法描述 快速排序使用分治法来吧一个“串”…

QT中利用qss来创建一个圆角矩形窗口,并利用Qt::WA_TranslucentBackground属性解决留白问题

1、效果 2、实现 QWidget#centralwidget {border-radius: 30px solid default;border-image: url(:/images/bk<

探索认知智能的未来:知识图谱的崛起

知识图谱点燃语言模型的潜能 ©作者| 潇潇 来源|神州问学 一、 人工智能的三个层次 在人工智能的发展历程中&#xff0c;我们见证了从简单计算到复杂认知的飞跃。人工智能的发展可以概括为三个主要层次&#xff1a;计算智能、感知智能和认知智能。这三个层次不仅代表了技…

支持向量回归原理详解及Python代码示例

支持向量回归原理详解 支持向量回归&#xff08;Support Vector Regression, SVR&#xff09;是支持向量机&#xff08;SVM&#xff09;的一种扩展&#xff0c;用于回归问题。SVR通过寻找一个最佳的回归超平面&#xff0c;使得尽可能多的数据点落在超平面附近的ε-管内&#xf…

05-Shell编程之免交互

目录 5.1 Here Document免交互 5.1.1 通过passwd命令给用户设置密码&#xff1a; 5.2. Expect免交互 5.2.1使用Expect自动登录FTP服务器 5.2.2 使用Expect实现免交互磁盘创建 5.1 Here Document免交互 Here Document是Shell编程中实现免交互的一种常用方法。它使用I/O重定…

eNSP中VRRP的配置和使用

一、基础配置 1.新建拓扑图 2.配置vlan a.CORE-S1 <Huawei>system-view [Huawei]sysname CORE-S1 [CORE-S1]vlan 10 [CORE-S1-vlan10]vlan 20 [CORE-S1-vlan20]vlan 30 b.CORE-S2 <Huawei>system-view [Huawei]sysname CORE-S2 [CORE-S2]vlan 10 [CORE…

Git中的变基(Rebase)

Git 操作之变基&#xff08;Rebase&#xff09; ⭐⭐⭐ 目录 &#x1f514; 介绍&#x1f514; 格式&#x1f514; 示例&#x1f514; 特性&#x1f514; 变基与合并的区别&#x1f514; 使用场景 &#x1f514; 介绍 在Git中&#xff0c;下载后运行变基通常是指使用 git pull…

240627_图像24位深度(RGB图)转为8位深度(单通道图)

240627_图像24位深度&#xff08;RGB图&#xff09;转为8位深度&#xff08;单通道图&#xff09; 在使用网络上下载下来的一部分图像分割数据集时&#xff0c;有些标签图你看着是一个黑白图&#xff0c;但是他还是有可能是一张RGB三通道图&#xff0c;具体怎么区分呢。右击图…

FPGA - 图像灰度化

一&#xff0c;灰度图像概念 灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度&#xff0c;尽管理论上这个采样可以任何颜色的不同深浅&#xff0c;甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同&#xff0c;在计算机…

如何预防和处理他人盗用IP地址?

IP地址的定义及作用 解释 IP 地址在互联网中的作用。它是唯一标识网络设备的数字地址&#xff0c;类似于物理世界中的邮政地址。 1、IP地址盗窃的定义 解释一下什么是IP地址盗用&#xff0c;即非法使用他人的IP地址或者伪造IP地址的行为&#xff0c;这种行为可能引发法律和安…

hadoop离线与实时的电影推荐系统-计算机毕业设计源码10338

摘 要 随着互联网与移动互联网迅速普及&#xff0c;网络上的电影娱乐信息数量相当庞大&#xff0c;人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的离线与实时的电影推荐系统 成为一个热门。然而电影信息的表示相当复杂&#xff0c;己有的相似度计算方法与推荐算法都各…