当前位置: 首页 > news >正文

【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 时间函数

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;time.Timer 是一个用于在指定时间后执行操作的计时器。…...

壁仞科技上市前最后一波 校招 社招 内推

随着美国大选结束&#xff0c;国内GPU 产业得到空前的的发展空间&#xff0c;国内芯片相关股票一片飘红。 国内大型 GPU厂商壁仞科技&#xff0c;摩尔线程等正紧锣密鼓地加紧上市。 GPGPU 芯片赛道来到了史无前例的红利点&#xff0c;抓住机会&#x1f4aa; 壁仞科技正在火热…...

【微软报告:多模态基础模型】(2)视觉理解

欢迎关注【youcans的AGI学习笔记】原创作品 【微软报告&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软报告&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微软报告&#xff1a;多模态基础模型】&#xff08;3&#xff09;…...

Linux 驱动

四十三、Linux设备树 43.1 DTS、DTB 和 DTC DTS 是设备树源码文件 DTB 是将DTS 编译以后得到的二进制文件。 DTC 工具将.dts 编译为.dtb 43.2 DTS语法 43.2.1 .dtsi 头文件 在.dts 设备树文件中&#xff0c;可以通过“#include”来引用.h、.dtsi 和.dts 文件。 …...

【数学二】线性代数-线性方程组-齐次线性方程组、非齐次线性方程组

考试要求 1、会用克拉默法则. 2、理解齐次线性方程组有非零解的充分必要条件及非齐次线性方程组有解的充分必要条件. 3、理解齐次线性方程组的基础解系及通解的概念,掌握齐次线性方程组基础解系和通解的求法. 4、理解非齐次线性方程组的解的结构及通解的概念. 5、会用初等行变…...

Git别名设置

在 Git 中设置命令别名可以让你更高效地使用常见的 Git 命令。通过为常用命令创建简短的别名&#xff0c;可以减少输入的字符数并加速工作流程。 参考链接 设置 Git 命令别名的方法&#xff1a; 使用 Git 配置命令&#xff1a; Git 允许通过 git config 命令来设置命令别名。这…...

算法基础 -- 红黑树原理与插入伪代码

红黑树原理与插入伪代码 红黑树的原理 红黑树是一种自平衡的二叉搜索树&#xff0c;通过对节点的颜色&#xff08;红色或黑色&#xff09;以及结构的约束条件来保持树的平衡。红黑树的原理可以通过以下五个特性描述&#xff1a; 节点是红色或黑色。根节点必须是黑色。所有叶…...

力扣 LeetCode 27. 移除元素(Day1:数组)

解题思路&#xff1a; 注意&#xff1a;数组只能覆盖&#xff0c;不能删除 erase方法的复杂度为O( n )而不是O( 1 )&#xff0c;因为需要把删除后后面的数组向前移动 方法一&#xff1a;双层for循环暴力 方法二&#xff1a;快慢指针 fast表示新数组的元素 slow表示新数组元…...

微服务链路追踪skywalking安装

‌SkyWalking是一个开源的分布式追踪系统&#xff0c;主要用于监控和分析微服务架构下的应用性能。‌ 它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案&#xff0c;特别适用于微服务、云原生架构和基于容器的环境&#xff08;如Docker、K8s、Mesos&…...

mqtt学习笔记(一)

以解决问题方式逐步学习探索 mqtt使用场景mqtt可能缺点mqtt学习疑问探索1、mqtt主题发布过的历史消息&#xff0c;全新连接的client能消费到吗&#xff1f;2、mqtt的client掉线如何重连&#xff0c;重连后订阅的topic配置还在不&#xff1f;3、mqtt的client掉线重连后&#xff…...

Kafka Eagle 安装教程

目录 前言 一、安装前的准备 1. 系统要求 2. 安装 JDK 3. 安装 Kafka 和 Zookeeper 4. MySQL 环境准备 二、下载并安装 Kafka Eagle 三、配置 Kafka Eagle 1. 编辑配置文件 2. 配置 Kafka 和 Zookeeper 信息 四、启动 Kafka Eagle 五、访问 Kafka Eagle 六、测试功…...

Ajax 获取进度和中断请求

HTML加入一些内容方便看效果和做交互&#xff1a; <div><p>当前传输进度&#xff1a;<span id"progress">0%</span></p><button id"send">发送</button><button id"btn">中断</button> …...

实验5:网络设备发现、管理和维护

实验5&#xff1a;网络设备发现、管理和维护 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握Cisco 路由器和交换机的IOS配置管理。自动从NTP服务器获取时间信息。能够利用TFTP服务器实现路由器和交换机配置文件的备份和恢复。同时验证CDP协议和LLDP协议的网络参数。完…...

kafka 生产经验——数据积压(消费者如何提高吞吐量)

bit --> byte --> kb -->mb -->gb --> tb --> pb --> eb -> zb -->yb...

对等同步身份认证(Simultaneous Authentication of Equals,简称SAE)介绍

对等同步身份认证&#xff08;Simultaneous Authentication of Equals&#xff0c;简称SAE&#xff09;介绍 对等同步身份认证&#xff08;Simultaneous Authentication of Equals&#xff0c;简称SAE&#xff09;是一种基于密码的身份验证方法&#xff0c;用于安全地交换密钥…...

Ajax 与 Vue 框架应用点——随笔谈

老式 在老式的技术中&#xff0c;一个网页通常由前端工程师直接使用 HTML、CSS、JavaScript 编写而成 这种方式的优点很明显&#xff1a;简单粗暴&#xff0c;方便工程师以简单的思维完成工作 当然&#xff0c;缺点也很明显&#xff0c;包括但不限于&#xff1a; 直接原生开发…...

The Internals of PostgreSQL 翻译版 持续更新...

为了方便自己快速学习&#xff0c;整理了翻译版本&#xff0c;目前翻译的还不完善&#xff0c;后续会边学习边完善。 文档用于自己快速参考&#xff0c;会持续修正&#xff0c;能力有限,无法确保正确!!! 《The Internals of PostgreSQL 》 不是 《 PostgreSQL14 Internals 》…...

redis 原理篇 31 redis内存回收 内存淘汰策略

哦哦&#xff0c; 内存满了咋搞 就算过期key 删除&#xff0c;还是不够用&#xff0c; 这种问题没办法&#xff0c;只能了解一下啥解决方案了&#xff0c; 内存是有限的&#xff0c;一直存&#xff0c;肯定会满&#xff0c;这时&#xff0c;咋处理&#xff1f; 首先&#xff…...

微信小程序——实现二维码扫描功能(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

【go从零单排】HTTP客户端和服务端

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;net/http 包提供了强大的 HTTP 客户端和服务器功能。 &…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...

6.9本日总结

一、英语 复习默写list11list18&#xff0c;订正07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语&#xff1a;复习l默写sit12list17&#…...