18、golang时间管理

时间

时间是非常重要的,离开了时间,几乎没有哪个生产环境数据能够有意义。
在Go语言中,时间定义为Time结构体。

package mainimport ("fmt""time"
)func main() {var t = time.Now()fmt.Println(t)		fmt.Printf("%v %+[1]v\n", t)fmt.Printf("%#v\n", t)fmt.Printf("%T, %[1]v\n", t.UTC()) // UTC时间
}
2024-01-13 19:06:34.6726547 +0800 CST m=+0.003070601
2024-01-13 19:06:34.6726547 +0800 CST m=+0.003070601 2024-01-13 19:06:34.6726547 +0800 CST m=+0.003070601
time.Date(2024, time.January, 13, 19, 6, 34, 672654700, time.Local)
time.Time, 2024-01-13 11:06:34.6726547 +0000 UTC

时间格式化

Go语言没有采用%Y%m%d这样的格式化符号,它很特别。

package mainimport ("fmt""time"
)func main() {var t = time.Now()fmt.Printf("%T, %[1]v\n", t)fmt.Println(t.Format("0102 030405 06 pm -0700"))fmt.Println(t.UTC().Format("0102 030405 06 pm"))
}
time.Time, 2024-01-13 19:10:07.3356399 +0800 CST m=+0.003551301
0113 071007 24 pm +0800
0113 111007 24 am

记住一个字符串"010203040506pm-0700",即 1月2日下午3点4分5秒06年西7区 ,改成我们习惯的格式符 2006/01/02 15:04:05 -0700

Year: "2006" "06"
Month: "Jan" "January" "01" "1"
Day of the week: "Mon" "Monday"
Day of the month: "2" "_2" "02" 2不补位;_2补空格;02不够补0
Day of the year: "__2" "002"
Hour: "15" "3" "03" (PM or AM) 如果写303显示为12小时制;15显示为24小时制
Minute: "4" "04"
Second: "5" "05"
AM/PM mark: "PM"
"-0700" ±hhmm 时区
09匹配小数部分
格式化时,09表示小数部分位数,0超出部分补0,9超出部分不补0
var t = time.Now()
fmt.Printf("%T, %[1]v\n", t)
fmt.Println(t.Format("2006/01/02 15:04:05 -0700")) // 带时区
fmt.Println(t.UTC().Format("2006/01/02 15:04:05.0000")) // 不带时区time.Time, 2024-01-13 19:14:51.5891868 +0800 CST m=+0.003472101
2024/01/13 19:14:51 +0800
2024/01/13 11:14:51.5891

时间解析

package mainimport ("fmt""time"
)
func main() {if t, err := time.Parse("2006/01/02 15:04:05 -0700", // 格式字符串"2008/09/08 20:36:50 +0800", // 时间字符串); err == nil {fmt.Println(t)} else {fmt.Println(err)}
}
2008-09-08 20:36:50 +0800 CST

带小数部分解析
.0 解析时,0的位数必须和字符串中的小数部分位数完全一致,否则失败
.9 解析时,可以匹配任意位数小数部分,包括没有小数部分

time.Parse(
"2006/01/02 15:04:05.000000 -0700", // 格式字符串
"2008/09/08 20:36:50.123456 +0800", // 时间字符串
)
time.Parse(
"2006/01/02 15:04:05.9 -0700",    // 格式字符串
"2008/09/08 20:36:50.123456 +0800", // 时间字符串
)

时间属性

package mainimport ("fmt""time"
)type Month intconst (January Month = 1 + iotaFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember
)type Weekday intconst (Sunday Weekday = iotaMondayTuesdayWednesdayThursdayFridaySaturday
)func main() {if t, err := time.Parse("2006/01/02 15:04:05 -0700", // 格式字符串"2008/09/08 20:36:50 +0800", // 时间字符串); err == nil {// 2008-09-08 20:36:50 +0800 CST// 时间戳fmt.Println(t.Unix(), t.UnixMilli(), t.UnixMicro(), t.UnixNano())// 年月日fmt.Println(t.Year(), t.Month(), t.Month().String(), // 英文月份,默认走String方法int(t.Month()), // 数字月份 9t.Day(),t.YearDay(), // YearDay本年的第几天)// 时分秒fmt.Println(t.Hour(), t.Minute(), t.Second(), t.Nanosecond()) //Nanosecond纳秒// 星期fmt.Println(t.Weekday(), int(t.Weekday())) // Weekdayfmt.Println(t.ISOWeek())                   // 年的第几周}
}1220877410 1220877410000 1220877410000000 1220877410000000000
2008 September September 9 8 252
20 36 50 0
Monday 1
2008 37

市区

package mainimport ("fmt""time"
)func main() {if t, err := time.Parse("2006/01/02 15:04:05", // 格式字符串"2008/09/08 20:36:50", // 时间字符串); err == nil {fmt.Println(t)         // 2008-09-08 20:36:50 +0000 UTCfmt.Println(t.Local()) // 2008-09-09 04:36:50 +0800 CST}
}
2008-09-08 20:36:50 +0000 UTC
2008-09-09 04:36:50 +0800 CST如果没有时区,表示UTC,可以简单认为是零时区时间。
注意,这里可能导致时间错误,给出的时间,心里想的是东八区的时间,但是Go语言却认为是零时区
的,如果再转换到东八区,就差了8个小时了。func main() {tz, _ := time.LoadLocation("Asia/Shanghai") // 使用名字if t, err := time.ParseInLocation("2006/01/02 15:04:05", // 格式字符串"2008/09/08 20:36:50", // 时间字符串tz,); err == nil {fmt.Println(t)         // 2008-09-08 20:36:50 +0800 CSTfmt.Println(t.Local()) // 2008-09-08 20:36:50 +0800 CST}
}2008-09-08 20:36:50 +0800 CST
2008-09-08 20:36:50 +0800 CST

时间运算

时间 + 时间 = ?
时间 - 时间 = 时间差、时间增量
时间 ± 时间增量 = 时间
package mainimport ("fmt""time"
)func main() {tz, _ := time.LoadLocation("Asia/Shanghai") // 使用名字s1 := "2022/09/08 20:36:50"s2 := "2022/09/08 21:40:51"layout := "2006/01/02 15:04:05"t1, _ := time.ParseInLocation(layout, s1, tz)t2, _ := time.ParseInLocation(layout, s2, tz)fmt.Println(t1)fmt.Println(t2)// 时间差delta := t2.Sub(t1)                     // t2 - t1fmt.Printf("delta: %v, %[1]T\n", delta) // Duration类型fmt.Println(delta.Seconds())            // 共差多少秒// 构造Durationns3 := time.Duration(3)              // 3纳秒s3 := time.Duration(3 * time.Second) // 3秒h3 := time.Duration(3 * time.Hour)   // 3小时fmt.Println(ns3, s3, h3)// 时间偏移t3 := t2.Add(h3)fmt.Println(t3)t4 := t2.Add(-h3)fmt.Println(t4)fmt.Println(t3.After(t4))
}2022-09-08 20:36:50 +0800 CST
2022-09-08 21:40:51 +0800 CST
delta: 1h4m1s, time.Duration
3841
3ns 3s 3h0m0s
2022-09-09 00:40:51 +0800 CST
2022-09-08 18:40:51 +0800 CST
true

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

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

相关文章

【嵌入式-裸机开发】kermit工具安装使用

安装ckermit sudo apt-get install ckermit配置kermit vim ~/.mykermrc set line /dev/ttyS0 set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bi…

ZZULIOJ 1121: 电梯

题目描述 在某一高层建筑内只有一部电梯,当你按下一个数时,电梯会运行到那一层。已知电梯每上升一层需6秒,下降一层需4秒,在需要停留的那层停留5秒。现有N个整数组成的一个需求列表,电梯将依次响应,电梯从…

树的高度C++(dfs)

树是一种特殊的图结构,有根树是一个有固定根的树。 现在给定一棵有根树,编程求出树中所有节点到指定的根节点最远距离。 输入格式 第一行是两个整数 N,M,表示数的顶点数和根节点的编号。接下来 N−1 行,每行两个整数 u,v&#xf…

SpringIOC之support模块GenericGroovyApplicationContext

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

商务外语MR混合现实仿真情景实训教学

MR混合现实技术是一种将虚拟世界与真实世界相结合的技术。通过MR设备,我们可以将虚拟的场景、人物、物品等元素实时地呈现在真实的环境中,实现真实与虚拟的完美融合。在商务外语的实训教学中,MR技术可以为我们提供丰富的场景资源,…

【c++】利用嵌套map创建多层树结构

通常树的深度都大于1,即树有多层,而树结构又可以用c的map容器来实现,所以,本文给出了一种多层树结构的实现思路,同时也给出了相应的c代码。 整体思路概述 首先定义一个节点类Node类,要包括children&#x…

FineBI实战项目一(17):热门商品Top10分析开发

点击新建组件,创建热门商品Top10组件。 选择柱状图,拖拽cnt(总数)到横轴,拖拽goodName到纵轴。 选择排序规则。 修改横轴和纵轴的标签名称 切换到仪表板,拖拽组件到仪表板 效果如下:

运维信创:驱动数字化转型,塑造企业未来之篇章

随着信息技术的迅猛发展,数字化转型已成为企业生存和发展的必由之路。在数字化转型的过程中,运维作为企业IT的重要组成部分,其信创成熟度直接关系到数字化转型的进程。本文将深入探讨运维的信创,分析其与信创的区别、技术成熟度、…

代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II,总结

系列文章目录 代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素 代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 代码随想录算法训练营第三天|链表理论基础&#xff…

【计算机二级考试C语言】C数据类型

C 数据类型 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 C 中的类型可分为以下几种: 序号类型与描述1基本数据类型 它们是算术类型&#x…

MySQL-单表、多表查询

一、单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 v…

Vue3 父组件传值给子组件+以及使用NModal组件

前言:我想实现表格中点击详情弹窗出一个表格展示该行详细信息。想着这个弹窗里用子组件展示。分担父组件下,怕代码过多。(使用NModal组件弹窗展示) 等我一波百度,嗯,实现方法挺多嘛,什么refs什…

SpringMVC RESTful

文章目录 1、RESTful简介a>资源b>资源的表述c>状态转移 2、RESTful的实现3、HiddenHttpMethodFilter 1、RESTful简介 REST:Representational State Transfer,表现层资源状态转移。 a>资源 资源是一种看待服务器的方式,即&…

HCIA-Datacom实验指导手册:1、华为 VRP 系统基本操作

1、华为 VRP 系统基本操作 一、实验目的:二、实验拓扑:三、实验目的:四、配置步骤:步骤 1 通过 Console 方式登录到 Router 的 CLI步骤 2 查看设备基本信息步骤 3 完成设备基本配置步骤 4 保存设备当前配置步骤 5 操作设备的文件系统步骤 6 重启设备五、结果验证1、比较保存…

[蓝桥杯 2016 省 AB] 四平方和

题目描述 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4个正整数的平方和。 如果把 0 包括进去,就正好可以表示为 4 个数的平方和。 比如: 50^20^21^22^2。 71^21^21^22^2。 对于一个给定的正整数&#…

大数据深度学习卷积神经网络CNN:CNN结构、训练与优化一文全解

文章目录 大数据深度学习卷积神经网络CNN:CNN结构、训练与优化一文全解一、引言1.1 背景和重要性1.2 卷积神经网络概述 二、卷积神经网络层介绍2.1 卷积操作卷积核与特征映射卷积核大小多通道卷积 步长与填充步长填充 空洞卷积(Dilated Convolution&…

详解Spring事件监听

第1章:引言 大家好,我是小黑。今天咱们来聊下Spring框架中的事件监听。在Java里,事件监听听起来好像很高大上,但其实它就像是我们日常生活中的快递通知:当有快递到了,你会收到一个通知。同样,在…

YOLOv8原理与源码解析

课程链接:https://edu.csdn.net/course/detail/39251 【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来!代码阅读是从基础到提高的必由之路。 YOLOv8 基于先前…

解决JuPyter500:Internal Server Error问题

目录 一、问题描述 二、问题分析 三、解决方法 四、参考文章 一、问题描述 在启动Anaconda Prompt后,通过cd到项目文件夹启动Jupyter NoteBook点击.ipynb文件发生500报错。 二、问题分析 base环境下输入指令: jupyter --version 发现jupyter环境…

Java之Lambda表达式

1.介绍 Lambda表达式是JDK8开始后的一种新语法形式。作用是简化匿名内部类的代码写法 2.Lambda表达式的简化格式 (匿名内部类被重写方法的形参列表) -> {被重写方法的方法体代码}3.Lambda表达式的限制 只允许操作函数式编程接口,即有且仅有一个抽象方法的接口…