在Go中处理时间数据
获取时间
这可能是软件包中最常用的方法。我们如何知道当前的时间呢?像这样:
t := time.Now()
fmt.Println(t)ini复制代码2023-04-16 23:54:45.924965 +0800 CST m=+0.000152293
这就是当前的时间。这是很麻烦的,所以我将把它分解成几个部分。
2023-02-06:年月日。
23:01:48.9983151:时、分、秒
0800:与 GMT 的时差。
CST:您所在的当前时区。
m=+0.000152293: 单调时钟读数。
我们将在本文后面介绍单调时钟。 我们现在可以继续前进。
有没有更好的方法来格式化这个?
你打赌。
t := time.Now()
fmt.Println(t.Year())
fmt.Println(t.Month())
fmt.Println(t.Day())
fmt.Println(t.Date())
fmt.Println(t.Hour())
fmt.Println(t.Minute())
fmt.Println(t.Second())yaml复制代码2023
April
17
2023 April 17
0
3
31
以下是如何提取时间的每个元素。 很简单,对吧?
我们如何以更漂亮的格式打印它?
fmt.Printf("%d %d %d\n", t.Year(), t.Month(), t.Day())
2023 4 17
您可以看到我们如何使用 fmt.Printf 函数来根据自己的喜好格式化时间。
但是如果我们想用名字显示月份,比如二月而不是 2 怎么办? 如果我们想以 12 小时制而不是 24 小时制显示时间怎么办? 你可以看到它是如何很快变得复杂的。
有一种更好的格式化时间的方法
幸运的是,我们有 time.Format 函数来帮助我们。 让我们看看它是如何工作的。
less复制代码
fmt.Println(t.Format("Mon Jan 2 15:04:05 2006 MST"))
fmt.Println(t.Format("Mon Jan 2 15:04:05"))
fmt.Println(t.Format("2006/01/02"))
fmt.Println(t.Format("3:04PM"))
fmt.Println(t.Format("15:04PM"))
Mon Apr 17 00:06:21 2023 CST
Mon Apr 17 00:06:21
2023/04/17
12:06AM
00:06AM
我认为这是我刚开始学习这个主题时最让我失望的部分。 这也是您可以看到语言设计者有多么厚颜无耻的部分。
我们可以看到 time.Format 接受一个字符串,该字符串表示我们希望时间采用的格式。这是奇怪的部分,因为 Go 对格式字符串的格式非常非常讲究。
Mon Apr 17 00:06:21 2023 CST
格式字符串必须是该字符串的变体,否则代码会打印出奇怪的时间。 有趣的是,如果排除 Mon,格式字符串的每个元素都代表一个整数。 Jan 是 1,2 是 2,15 是 3。
复制代码1 2 3 4 5 6 -7
不过,从上面的代码中,您可以看到我们如何按照我们想要的方式格式化我们的时间。 而且我们不必编写额外的函数来将小时转换为 12 或 24 小时制,或者将每个整数映射到月份。
您也可以使用预定义的格式,如下所示:
fmt.Println(time.UnixDate)
fmt.Println(time.RFC3339)yaml复制代码Mon Jan _2 15:04:05 MST 2006
2006-01-02T15:04:05Z07:00
查看文档以了解更多格式。
不同的时区呢?
如上所示,系统会自动检测时区。 但是,在某些情况下,您可能需要显示不同时区的时间。
nt := time.Now()
lt := time.Now().Local()
ut := time.Now().UTC()
fmt.Println(nt)
fmt.Println(lt)
fmt.Println(ut)
2023-04-17 00:11:10.214751 +0800 CST m=+0.000135417
2023-04-17 00:11:10.214751 +0800 CST
2023-04-16 16:11:10.214751 +0000 UTC
Local() 获取本地时区,这与 time.Now() 会自动检测到的时间相同。 调用 UTC() 会将时区转换为 UTC。
但是,如果我们需要更强大的东西怎么办?
l, _ := time.LoadLocation("UTC")
fmt.Printf("%s\n", nt.In(l))l, _ = time.LoadLocation("Europe/London")
fmt.Printf("%s\n", nt.In(l))l, _ = time.LoadLocation("America/Los_Angeles")
fmt.Printf("%s\n", nt.In(l))l, _ = time.LoadLocation("Asia/Seoul")
fmt.Printf("%s\n", nt.In(l))
2023-04-16 16:12:00.918525 +0000 UTC
2023-04-16 17:12:00.918525 +0100 BST
2023-04-16 09:12:00.918525 -0700 PDT
2023-04-17 01:12:00.918525 +0900 KST
time.LoadLocation 将加载您选择的语言环境。 您可以使用此结果通过传入你的 time.In 来转换您的时间。
您还可以从字符串中读取时间
在许多情况下,您将不得不读入一个字符串。 通常,这些将是时间戳。 在这些时间戳字符串上使用时间库的函数不是很好吗?
默认情况下,时间库适用于 time.Time 类型。 但是,我们可以使用 time.Parse 来解析这些时间戳字符串。
go复制代码
timestamp := "2023-02-06 23:49:01"
ts, err := time.Parse("2006-01-02 15:04:05", timestamp)
if err != nil {fmt.Println(err)
}
fmt.Println(ts)
yaml复制代码2023-02-06 23:49:01 +0000 UTC
您还可以使用上述 Format 方法格式化 ts。
等等,什么是单调时钟?
让我们回到这个话题。 这听起来比实际情况要可怕得多。
您的计算机有一个计时时钟。 很有可能这次相当不稳定。 有没有过在去另一个国家旅行后你的时钟慢了几个小时的经历? 是否曾经需要重新设置您的时钟以使其与您的手表相匹配? 这个时钟叫做挂钟,很容易改变。
虽然挂钟擅长报时,但不适合测量时间。 例如,看看这段代码。
t1 := time.Now()
fmt.Println(t1)
time.Sleep(time.Second)
t2 := time.Now()
fmt.Println(time.Now())
fmt.Println(t2.Sub(t1))
2023-04-17 00:15:32.65858 +0800 CST m=+0.000109168
2023-04-17 00:15:33.660121 +0800 CST m=+1.001672543
1.001563166s
上面的代码测量了 t1 和 t2 之间经过的时间。 这看起来很明显,因为我们在声明 t2 之前等待了一秒钟。 但是,如果我们以某种方式设法在该跨度内切换我们的操作系统时间设置呢? 如果我们将系统时钟增加 4 小时,是否意味着 t1 和 t2 之间经过的时间为 4 小时 1 秒? 这是荒谬的!
这就是 Go 使用单调时钟来测量时间的原因。 从打印出来的时间里的m值可以看出,时间差大约是一秒。 单调时钟允许准确测量时间。
结论
我们对时间的概念如此熟悉,以至于我们倾向于认为我们对它的理解是理所当然的。 然而,时间往往是在计算机中表示的更令人沮丧的事物之一。 幸运的是,Go 开发人员已经从我们这里抽象出了大部分原始转换,这样我们就可以使用 time 包的简单易懂的功能。 这篇文章涵盖了很多必要的功能,但如果您需要细节,您可以随时参考官方文档。
相关文章:
在Go中处理时间数据
获取时间 这可能是软件包中最常用的方法。我们如何知道当前的时间呢?像这样: t : time.Now() fmt.Println(t)ini复制代码2023-04-16 23:54:45.924965 0800 CST m0.000152293这就是当前的时间。这是很麻烦的,所以我将把它分解成几个部分。 …...
SOLIDWORKS PDM 2024数据管理5大新功能
1. 改进的视觉内容 • 通过装配体可视化功能,在 SOLIDWORKS 中以图形方式查看零部件数据,如工作流程状态。• 使用特定图标迅速识别焊件切割清单零部件。 优点:重要数据和系统信息一目了然。 2.增强的数据保护和跟踪功能 •保护“包含”和…...
5G与医疗:开启医疗技术的新篇章
5G与医疗:开启医疗技术的新篇章 随着5G技术的快速发展和普及,它已经在医疗领域产生了深远的影响。5G技术为医疗行业提供了更高效、更准确、更及时的通信方式,从而改变了医疗服务的模式和患者的体验。本文将探讨5G技术在医疗领域的应用场景、优…...
Linux云服务器限制ip进行ssh远程连接
对Linux云服务器限制IP进行SSH远程连接的原因主要有以下几点: 增加安全性:SSH是一种加密的网络传输协议,可以保护数据的机密性和完整性。通过限制SSH连接的IP地址,可以防止未经授权的访问和数据泄露。只有拥有访问权限的IP地址才…...
【100天精通Python】Day72:Python可视化_一文掌握Seaborn库的使用《二》_分类数据可视化,线性模型和参数拟合的可视化,示例+代码
目录 1. 分类数据的可视化 1.1 类别散点图(Categorical Scatter Plot) 1.2 类别分布图(Categorical Distribution Plot) 1.3 类别估计图(Categorical Estimate Plot) 1.4 类别单变量图(Cat…...
(二开)Flink 修改源码拓展 SQL 语法
1、Flink 扩展 calcite 中的语法解析 1)定义需要的 SqlNode 节点类-以 SqlShowCatalogs 为例 a)类位置 flink/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCatalogs.java 核心方法: Override pu…...
java中spi与api的区别
近期看了很多开源组件的源码,发现很多地方地方用到了 spi 的功能,开始思考 spi 与 api 的区别 发现 spi 侧重于抽象层次的概念,目前接触到的就是 java 里大量用到了这个,通过定义的接口来抽象通用的功能,然而 api 是不…...
【Android知识笔记】插件化专题(二)
在上一篇专题【Android知识笔记】插件化专题(一) 中详细介绍了Android三种插件化方案的实现以及它们的优缺点对比总结等。这一篇中主要来看一下一些插件化开源框架的实现原理,当然市场上的插件化框架有很多,层出不穷,如 DiDi VirtualApk、360 Replugin 等。本人在过去的工…...
赶紧收藏!史上最全IDEA快捷键大全
参考 IntelliJ IDEA 的官网,列举出了IntelliJ IDEA(Windows 版)的所有快捷键。 建议收藏,有需要的时候根据关键字来查找! idea专业版获取 kdocs.cn/l/ctYoaM6evJkl 该快捷键共分 16 类,可以方便的按各类…...
IntelliJ IDEA 把package包展开和压缩
想要展开就把对勾取消,想要压缩就勾上...
Python——自动创建文件夹
文章目录 前言一、判断文件夹或者文件是否存在二、创建一级文件夹三、创建多级文件夹四、代码封装前言 利用 Python编程语言实现自动创建文件夹,程序以函数形式封装,直接按要求传参即可调用。 在python中没有直接针对文件夹的操作方法,可以借助模块os,os.path和shutil来操作…...
Leetcode—21.合并两个有序链表【简单】
2023每日刷题(十三) Leetcode—21.合并两个有序链表 直接法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode* list1, struct…...
数据链路层和DNS之间的那些事~
数据链路层,考虑的是两个节点之间的传输。这里面的典型协议也很多,最知名的就是“以太网”。我们本篇主要介绍的就是以太网协议。这个协议规定了数据链路层,也规定了物理层的内容。 目录 以太网帧格式 帧头 载荷 帧尾 DNS 从输入URL到…...
Spring-声明式事务
声明式事务 一、简介1、准备工作2、测试 二、声明式事务概念1、编程式事务2、声明式事务3、基于注解的声明式事务1.测试无事务情况2.加入事务①Transactional注解标识的位置②事务属性:只读③事务属性:超时④事务属性:回滚策略⑤事务属性&…...
腾讯云轻量服务器地域选择教程,一篇文章就够了
腾讯云轻量应用服务器地域是指轻量服务器数据中心所在的地理位置,如上海、广州和北京等地域,如何选择地域?腾讯云百科txybk.com建议地域选择遵循就近原则,用户距离轻量服务器地域越近,网络延迟越低,速度就越…...
【斗罗二】王东升级三环,戴华斌挑衅,雨浩单手接鼎订下赌约
【侵权联系删除】【文/郑尔巴金】 深度爆料,《绝世唐门》第20集,一场瞩目的战斗即将爆发。王冬,这位一年级的强攻系班长,将与戴华斌进行一场激烈的较量。王冬拥有三大武魂,其中最为人们所熟知的是那光明女神蝶&#x…...
洛谷 B2135:单词替换
【题目来源】https://www.luogu.com.cn/problem/B2135【题目描述】 输入一个字符串,以回车结束(字符串长度 ≤200)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换…...
IDEA中application.properties文件中文乱码
现象: 原因: 项目编码格式与IDEA编码格式不一致导致的 解决办法: 在File->Settings->Editor->File Encodings选项中,将Global Encoding,Project Encoding,Default encoding for properties files这三个选项置为一致&a…...
Rust 模块系统
文章目录 模块系统crate包cargo 创建库库的使用 模块系统 Rust的{模块系统|the module system},包括: * 包(Packages): Cargo 的一个功能,它允许你构建、测试和分享 crate。 * Crates :一个模…...
面向服务架构-架构师(六十四)
SOA概述和发展、参考架构、协议和规范、标准和原则、设计模式、构件和实施。 SOA概述和发展 服务指系统对外提供的功能,SOA是一种应用框架。 微服务去掉了ESB企业服务总线,SOA集中式,SOA和微服务的区别: 微服务更加精细。服务…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
