【go从零单排】Timer、Epoch 时间函数

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。
📗概念
在 Go 语言中,time.Timer 是一个用于在指定时间后执行操作的计时器。它可以用于延迟执行某些任务或在特定时间间隔内执行操作。
💻代码
日期Example
package mainimport ("fmt""time" //time:用于处理时间和日期。
)func main() {//p := fmt.Println:将 fmt.Println 函数赋值给变量 p,方便后续调用。p := fmt.Println//获取当前时间:time.Now() 返回当前的本地时间。now := time.Now()p(now) //打印当前时间//创建一个特定的时间:time.Date 创建一个指定的时间(2009年11月17日20时34分58秒)。then := time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)p(then) //打印这个特定的时间。//分别获取then的年月日时分秒p(then.Year())p(then.Month())p(then.Day())p(then.Hour())p(then.Minute())p(then.Second())p(then.Nanosecond()) //获取纳秒p(then.Location()) //获取时区信息p(then.Weekday()) //获取星期几p(then.Before(now)) //检查 then 是否在 now 之前。p(then.After(now)) //检查 then 是否在 now 之后。p(then.Equal(now)) //检查 then 是否与 now 相等。diff := now.Sub(then) //计算时间差:now.Sub(then) 返回 now 和 then 之间的时间差(time.Duration 类型)。p(diff)//diff.Hours():返回时间差的小时数。//diff.Minutes():返回时间差的分钟数。//diff.Seconds():返回时间差的秒数。//diff.Nanoseconds():返回时间差的纳秒数。p(diff.Hours())p(diff.Minutes())p(diff.Seconds())p(diff.Nanoseconds())//then.Add(diff):在 then 时间上加上时间差 diff,得到一个新的时间。//then.Add(-diff):在 then 时间上减去时间差 diff,得到一个新的时间。p(then.Add(diff))p(then.Add(-diff))
}//输出
//2024-11-12 15:57:23.595423 +0800 CST m=+0.000228772
//2009-11-17 20:34:58.651387237 +0000 UTC
//2009
//November
//17
//20
//34
//58
//651387237
//UTC
//Tuesday
//true
//false
//false
//131363h22m24.944035763s
//131363.3735955655
//7.88180241573393e+06
//4.7290814494403577e+08
//472908144944035763
//2024-11-12 07:57:23.595423 +0000 UTC
//1994-11-23 09:12:33.707351474 +0000 UTC
定时器Example
package mainimport ("fmt""time"
)func main() {// 创建一个新的计时器,设置为 2 秒timer := time.NewTimer(2 * time.Second)fmt.Println("Timer started for 2 seconds...")// 等待计时器到期<-timer.Cfmt.Println("Timer expired!")// 创建另一个计时器timer2 := time.NewTimer(3 * time.Second)go func() {// 等待计时器到期并打印<-timer2.Cfmt.Println("Timer 2 expired!")}()// 在 1 秒后停止计时器time.Sleep(1 * time.Second)stopped := timer2.Stop()if stopped {fmt.Println("Timer 2 stopped before expiration.")}// 等待一段时间以确保程序不会立即退出time.Sleep(5 * time.Second)
}//输出
//Timer started for 2 seconds...
//Timer expired!
//Timer 2 stopped before expiration.
Epoch(Unix纪元) Example
package mainimport ("fmt""time"
)func main() {//获取当前时间:time.Now() 返回当前的本地时间,并将其赋值给变量 now。now := time.Now()fmt.Println(now)//now.Unix() 返回从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的秒数(Unix 时间戳)。fmt.Println(now.Unix())//now.UnixMilli() 返回从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的毫秒数。fmt.Println(now.UnixMilli())//now.UnixNano() 返回从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的纳秒数。fmt.Println(now.UnixNano())//time.Unix(now.Unix(), 0) 将当前时间的 Unix 时间戳(秒)转换回 time.Time 类型。fmt.Println(time.Unix(now.Unix(), 0)) //第二个参数 0 表示纳秒部分,这里设置为 0。//time.Unix(0, now.UnixNano()) 将当前时间的 Unix 时间戳(纳秒)转换回 time.Time 类型。fmt.Println(time.Unix(0, now.UnixNano())) //第一个参数 0 表示秒部分,这里设置为 0。
}//输出
//2024-11-12 16:14:18.384693 +0800 CST m=+0.000127501
//1731399258
//1731399258384
//1731399258384693000
//2024-11-12 16:14:18 +0800 CST
//2024-11-12 16:14:18.384693 +0800 CST
💡 Tips小知识点
使用Time相关的注意事项:
- 明确时区:Go 默认使用 UTC 时间。确保在处理时区时明确指定,特别是在涉及用户本地时间和服务器时间的场景中。
- 使用 time.LoadLocation:可以加载特定的时区
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {// 处理错误
}
- 选择合适的时间戳:根据需求选择使用秒、毫秒或纳秒。Unix() 返回秒,UnixMilli() 返回毫秒,UnixNano() 返回纳秒。确保你在存储或比较时间时使用一致的单位。
- 避免精度丢失:在进行时间计算时,注意可能的精度丢失,尤其是在转换不同时间单位时
- 使用 time.Duration:使用 time.Duration 类型来表示时间间隔,避免手动计算时间差
- 计时器和Ticker的并发使用:在并发环境中使用 time.Timer 和 time.Ticker 时,要确保对它们的访问是安全的,尤其是在多个协程中使用时。
- 避免频繁调用 time.Now():在性能敏感的代码中,尽量减少对 time.Now() 的频繁调用,可以将结果缓存到变量中。
💪无人扶我青云志,我自踏雪至山巅。

相关文章:
【go从零单排】Timer、Epoch 时间函数
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,time.Timer 是一个用于在指定时间后执行操作的计时器。…...
壁仞科技上市前最后一波 校招 社招 内推
随着美国大选结束,国内GPU 产业得到空前的的发展空间,国内芯片相关股票一片飘红。 国内大型 GPU厂商壁仞科技,摩尔线程等正紧锣密鼓地加紧上市。 GPGPU 芯片赛道来到了史无前例的红利点,抓住机会💪 壁仞科技正在火热…...
【微软报告:多模态基础模型】(2)视觉理解
欢迎关注【youcans的AGI学习笔记】原创作品 【微软报告:多模态基础模型】(1)从专家到通用助手 【微软报告:多模态基础模型】(2)视觉理解 【微软报告:多模态基础模型】(3)…...
Linux 驱动
四十三、Linux设备树 43.1 DTS、DTB 和 DTC DTS 是设备树源码文件 DTB 是将DTS 编译以后得到的二进制文件。 DTC 工具将.dts 编译为.dtb 43.2 DTS语法 43.2.1 .dtsi 头文件 在.dts 设备树文件中,可以通过“#include”来引用.h、.dtsi 和.dts 文件。 …...
【数学二】线性代数-线性方程组-齐次线性方程组、非齐次线性方程组
考试要求 1、会用克拉默法则. 2、理解齐次线性方程组有非零解的充分必要条件及非齐次线性方程组有解的充分必要条件. 3、理解齐次线性方程组的基础解系及通解的概念,掌握齐次线性方程组基础解系和通解的求法. 4、理解非齐次线性方程组的解的结构及通解的概念. 5、会用初等行变…...
Git别名设置
在 Git 中设置命令别名可以让你更高效地使用常见的 Git 命令。通过为常用命令创建简短的别名,可以减少输入的字符数并加速工作流程。 参考链接 设置 Git 命令别名的方法: 使用 Git 配置命令: Git 允许通过 git config 命令来设置命令别名。这…...
算法基础 -- 红黑树原理与插入伪代码
红黑树原理与插入伪代码 红黑树的原理 红黑树是一种自平衡的二叉搜索树,通过对节点的颜色(红色或黑色)以及结构的约束条件来保持树的平衡。红黑树的原理可以通过以下五个特性描述: 节点是红色或黑色。根节点必须是黑色。所有叶…...
力扣 LeetCode 27. 移除元素(Day1:数组)
解题思路: 注意:数组只能覆盖,不能删除 erase方法的复杂度为O( n )而不是O( 1 ),因为需要把删除后后面的数组向前移动 方法一:双层for循环暴力 方法二:快慢指针 fast表示新数组的元素 slow表示新数组元…...
微服务链路追踪skywalking安装
SkyWalking是一个开源的分布式追踪系统,主要用于监控和分析微服务架构下的应用性能。 它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案,特别适用于微服务、云原生架构和基于容器的环境(如Docker、K8s、Mesos&…...
mqtt学习笔记(一)
以解决问题方式逐步学习探索 mqtt使用场景mqtt可能缺点mqtt学习疑问探索1、mqtt主题发布过的历史消息,全新连接的client能消费到吗?2、mqtt的client掉线如何重连,重连后订阅的topic配置还在不?3、mqtt的client掉线重连后ÿ…...
Kafka Eagle 安装教程
目录 前言 一、安装前的准备 1. 系统要求 2. 安装 JDK 3. 安装 Kafka 和 Zookeeper 4. MySQL 环境准备 二、下载并安装 Kafka Eagle 三、配置 Kafka Eagle 1. 编辑配置文件 2. 配置 Kafka 和 Zookeeper 信息 四、启动 Kafka Eagle 五、访问 Kafka Eagle 六、测试功…...
Ajax 获取进度和中断请求
HTML加入一些内容方便看效果和做交互: <div><p>当前传输进度:<span id"progress">0%</span></p><button id"send">发送</button><button id"btn">中断</button> …...
实验5:网络设备发现、管理和维护
实验5:网络设备发现、管理和维护 实验目的及要求: 通过实验,掌握Cisco 路由器和交换机的IOS配置管理。自动从NTP服务器获取时间信息。能够利用TFTP服务器实现路由器和交换机配置文件的备份和恢复。同时验证CDP协议和LLDP协议的网络参数。完…...
kafka 生产经验——数据积压(消费者如何提高吞吐量)
bit --> byte --> kb -->mb -->gb --> tb --> pb --> eb -> zb -->yb...
对等同步身份认证(Simultaneous Authentication of Equals,简称SAE)介绍
对等同步身份认证(Simultaneous Authentication of Equals,简称SAE)介绍 对等同步身份认证(Simultaneous Authentication of Equals,简称SAE)是一种基于密码的身份验证方法,用于安全地交换密钥…...
Ajax 与 Vue 框架应用点——随笔谈
老式 在老式的技术中,一个网页通常由前端工程师直接使用 HTML、CSS、JavaScript 编写而成 这种方式的优点很明显:简单粗暴,方便工程师以简单的思维完成工作 当然,缺点也很明显,包括但不限于: 直接原生开发…...
The Internals of PostgreSQL 翻译版 持续更新...
为了方便自己快速学习,整理了翻译版本,目前翻译的还不完善,后续会边学习边完善。 文档用于自己快速参考,会持续修正,能力有限,无法确保正确!!! 《The Internals of PostgreSQL 》 不是 《 PostgreSQL14 Internals 》…...
redis 原理篇 31 redis内存回收 内存淘汰策略
哦哦, 内存满了咋搞 就算过期key 删除,还是不够用, 这种问题没办法,只能了解一下啥解决方案了, 内存是有限的,一直存,肯定会满,这时,咋处理? 首先ÿ…...
微信小程序——实现二维码扫描功能(含代码)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
【go从零单排】HTTP客户端和服务端
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,net/http 包提供了强大的 HTTP 客户端和服务器功能。 &…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
