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

Go语言的时间处理

Go语言的时间处理1. 时间处理的基础概念1.1 时间的表示时间是一种重要的数据类型用于表示时刻和时间段Go语言使用time包处理时间相关操作时间处理在很多应用中都非常重要如日志记录、定时任务、数据统计等1.2 Go语言的时间类型time.Time表示具体的时刻time.Duration表示时间段time.Location表示时区2. 时间的基本操作2.1 获取当前时间package main import ( fmt time ) func main() { // 获取当前时间 now : time.Now() fmt.Println(Current time:, now) // 获取当前时间戳秒 timestamp : now.Unix() fmt.Println(Current timestamp:, timestamp) // 获取当前时间戳纳秒 timestampNano : now.UnixNano() fmt.Println(Current timestamp (nano):, timestampNano) }2.2 时间格式化package main import ( fmt time ) func main() { now : time.Now() // 格式化时间 fmt.Println(RFC3339:, now.Format(time.RFC3339)) fmt.Println(ANSIC:, now.Format(time.ANSIC)) fmt.Println(UnixDate:, now.Format(time.UnixDate)) fmt.Println(Kitchen:, now.Format(time.Kitchen)) // 自定义格式 fmt.Println(Custom:, now.Format(2006-01-02 15:04:05)) }2.3 解析时间package main import ( fmt time ) func main() { // 解析时间字符串 timeStr : 2023-01-01 12:00:00 t, err : time.Parse(2006-01-02 15:04:05, timeStr) if err ! nil { fmt.Println(Error parsing time:, err) return } fmt.Println(Parsed time:, t) // 解析带时区的时间 timeStrWithZone : 2023-01-01T12:00:0008:00 t2, err : time.Parse(time.RFC3339, timeStrWithZone) if err ! nil { fmt.Println(Error parsing time with zone:, err) return } fmt.Println(Parsed time with zone:, t2) }3. 时间计算3.1 时间加减package main import ( fmt time ) func main() { now : time.Now() fmt.Println(Current time:, now) // 加1小时 t1 : now.Add(time.Hour) fmt.Println(After 1 hour:, t1) // 加30分钟 t2 : now.Add(30 * time.Minute) fmt.Println(After 30 minutes:, t2) // 减1天 t3 : now.Add(-24 * time.Hour) fmt.Println(Before 1 day:, t3) }3.2 时间差package main import ( fmt time ) func main() { start : time.Now() // 模拟一些操作 time.Sleep(1 * time.Second) end : time.Now() // 计算时间差 duration : end.Sub(start) fmt.Println(Time elapsed:, duration) fmt.Println(Seconds:, duration.Seconds()) fmt.Println(Milliseconds:, duration.Milliseconds()) fmt.Println(Microseconds:, duration.Microseconds()) fmt.Println(Nanoseconds:, duration.Nanoseconds()) }3.3 时间比较package main import ( fmt time ) func main() { now : time.Now() past : now.Add(-1 * time.Hour) future : now.Add(1 * time.Hour) // 比较时间 fmt.Println(now before future:, now.Before(future)) fmt.Println(now after past:, now.After(past)) fmt.Println(now equal to now:, now.Equal(now)) }4. 时区处理4.1 时区的概念时区是根据地球自转划分的不同区域每个时区的时间不同Go语言使用time.Location表示时区标准时区包括UTC、本地时区等4.2 使用时区package main import ( fmt time ) func main() { now : time.Now() fmt.Println(Local time:, now) // 获取UTC时区 utc : time.UTC fmt.Println(UTC time:, now.In(utc)) // 获取其他时区 loc, err : time.LoadLocation(America/New_York) if err ! nil { fmt.Println(Error loading location:, err) return } fmt.Println(New York time:, now.In(loc)) // 获取本地时区 localLoc : time.Local fmt.Println(Local time again:, now.In(localLoc)) }5. 定时器5.1 一次性定时器package main import ( fmt time ) func main() { fmt.Println(Start) // 创建一个2秒后触发的定时器 timer : time.NewTimer(2 * time.Second) // 等待定时器触发 -timer.C fmt.Println(Timer fired) // 重置定时器 timer.Reset(1 * time.Second) -timer.C fmt.Println(Timer fired again) // 停止定时器 timer.Stop() fmt.Println(Timer stopped) }5.2 周期性定时器package main import ( fmt time ) func main() { fmt.Println(Start) // 创建一个每秒触发的定时器 ticker : time.NewTicker(1 * time.Second) defer ticker.Stop() // 执行5次后停止 count : 0 for range ticker.C { count fmt.Println(Tick, count) if count 5 { break } } fmt.Println(Done) }6. 时间戳转换6.1 时间戳转时间package main import ( fmt time ) func main() { // 时间戳秒 timestamp : int64(1672531200) // 2023-01-01 00:00:00 UTC // 转换为时间 t : time.Unix(timestamp, 0) fmt.Println(Time from timestamp:, t) // 时间戳纳秒 timestampNano : int64(1672531200000000000) t2 : time.Unix(0, timestampNano) fmt.Println(Time from nanosecond timestamp:, t2) }6.2 时间转时间戳package main import ( fmt time ) func main() { now : time.Now() // 转换为时间戳秒 timestamp : now.Unix() fmt.Println(Timestamp:, timestamp) // 转换为时间戳纳秒 timestampNano : now.UnixNano() fmt.Println(Timestamp (nano):, timestampNano) }7. 时间格式化和解析的最佳实践7.1 常用时间格式2006-01-02 15:04:05常用的日期时间格式2006-01-02日期格式15:04:05时间格式time.RFC3339标准的ISO 8601格式7.2 解析时间的技巧使用标准格式常量注意时区问题处理解析错误8. 实战案例8.1 实现一个简单的计时器package main import ( fmt time ) func main() { start : time.Now() // 执行一些操作 for i : 0; i 100000000; i { // 空循环 } end : time.Now() duration : end.Sub(start) fmt.Printf(Operation took %v (%.2f seconds)\n, duration, duration.Seconds()) }8.2 实现一个定时任务package main import ( fmt time ) func main() { // 每天特定时间执行任务 targetHour : 12 targetMinute : 0 for { now : time.Now() // 检查是否到达目标时间 if now.Hour() targetHour now.Minute() targetMinute { fmt.Println(Executing daily task at, now) // 执行任务 task() // 等待一天 time.Sleep(24 * time.Hour) } else { // 每分钟检查一次 time.Sleep(1 * time.Minute) } } } func task() { fmt.Println(Task executed) }8.3 时间范围查询package main import ( fmt time ) func main() { // 模拟数据 events : []struct { name string time time.Time }{ {Event 1, time.Now().Add(-2 * time.Hour)}, {Event 2, time.Now().Add(-1 * time.Hour)}, {Event 3, time.Now()}, {Event 4, time.Now().Add(1 * time.Hour)}, {Event 5, time.Now().Add(2 * time.Hour)}, } // 定义时间范围 start : time.Now().Add(-1.5 * time.Hour) end : time.Now().Add(1.5 * time.Hour) // 查询时间范围内的事件 fmt.Printf(Events between %s and %s:\n, start.Format(time.RFC3339), end.Format(time.RFC3339)) for _, event : range events { if (event.time.After(start) || event.time.Equal(start)) (event.time.Before(end) || event.time.Equal(end)) { fmt.Printf(%s: %s\n, event.name, event.time.Format(time.RFC3339)) } } }9. 常见问题与解决方案9.1 时区问题问题不同时区的时间处理解决方案明确指定时区使用UTC作为标准9.2 时间精度问题问题时间精度不足解决方案使用纳秒级时间戳9.3 时间格式化错误问题时间格式化字符串错误解决方案使用标准的时间格式化常量10. 总结Go语言的time包提供了丰富的时间处理功能包括获取当前时间、时间格式化、解析时间、时间计算、时区处理、定时器等。通过合理使用这些功能我们可以处理各种时间相关的需求。本文介绍了Go语言时间处理的基础知识包括时间的基本操作、时间计算、时区处理、定时器、时间戳转换、时间格式化和解析的最佳实践、实战案例以及常见问题与解决方案等方面的内容。在实际开发中我们应该根据具体的需求选择合适的时间处理方法并且注意时区问题和时间精度问题。通过合理的时间处理我们可以确保应用程序在不同的时间场景下都能正确运行。希望本文对你理解和应用Go语言的时间处理有所帮助祝你在Go语言的道路上越走越远

相关文章:

Go语言的时间处理

Go语言的时间处理 1. 时间处理的基础概念 1.1 时间的表示 时间是一种重要的数据类型,用于表示时刻和时间段Go语言使用time包处理时间相关操作时间处理在很多应用中都非常重要,如日志记录、定时任务、数据统计等 1.2 Go语言的时间类型 time.Time&…...

STM32光敏传感器实战:从硬件连接到智能控制

1. 光敏传感器与STM32的完美组合 光敏传感器可以说是嵌入式开发中最基础也最实用的环境感知器件之一。记得我第一次用STM32连接光敏传感器时,那种"让单片机感知光线变化"的体验简直让人兴奋。这种传感器本质上就是个会"看"的电子元件&#xff0…...

3个高效使用bilibili-api-python的进阶技巧:解决你的B站数据获取难题

3个高效使用bilibili-api-python的进阶技巧:解决你的B站数据获取难题 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api 项目地址: https://gitco…...

突破Linux无线网络困局:Realtek 8851BE驱动深度调优指南

突破Linux无线网络困局:Realtek 8851BE驱动深度调优指南 【免费下载链接】rtw89 Driver for Realtek 8852AE, an 802.11ax device 项目地址: https://gitcode.com/gh_mirrors/rt/rtw89 当Ubuntu 24.04 LTS遇见了Realtek 8851BE无线网卡,一场无声的…...

langchain AI应用框架研究【开发部署-篇四】

上篇 本篇主要简单了解一下开发不部署。后面继续langgraph 14 开发 14.1 LangSmith Studio 在本地使用 LangChain 构建智能体时,如果能可视化内部运作、实时交互并随时调试,那会非常有帮助。LangSmith Studio 就是一个免费的可视化界面,专…...

把数据中心“搬”到太空去——聊聊太空算力

先给一个最直白的定义:太空算力,就是把地面的数据中心“搬”到卫星上。卫星在天上完成数据采集、处理、存储和输出——不用再把数据传回地面,天上自己就能搞定。那天上到底有什么数据?要处理什么、输出什么?能源和散热…...

万字干货!Agent Skills从入门到精通

请点击输入图片描述(最多18字)大家好,我是冷逸。如果你要问我,2026年最值得学习的AI技能是什么?我会毫不犹豫地推荐Skills。无论是Claude Code,还是龙虾、爱马仕,几乎所有的Agent,如…...

机器学习之超参数是什么?

机器学习里的「超参数」,用最简单的话讲清楚 超参数 训练前由人手动设置、模型自己不会学的参数 1. 一句话区分 模型参数(参数): 模型在训练过程中自己学到的东西 比如:权重、系数、分割点 超参数(超参&…...

绝地求生压枪宏终极指南:5分钟实现零后坐力稳定射击

绝地求生压枪宏终极指南:5分钟实现零后坐力稳定射击 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为绝地求生中的武器后坐力而…...

PCB布局复制技术解析与Altium Designer实践

1. PCB布局复制的技术本质与行业价值在电子工程领域,PCB布局复制远非简单的"复制粘贴"操作。这项技术的核心在于通过算法驱动的智能匹配,实现电路板设计要素的精准迁移。我曾参与过多个采用该技术的项目,最深刻的体会是&#xff1a…...

李飞飞弟子苏昊回国了!任职复旦大学

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【顶刊】投稿交流群添加微信号:CVer2233,小助手拉你进群!扫描下方二维码,加入CVer学术星球!可以获得最新顶会/顶刊上…...

为什么你的RAG服务在集群A正常,在集群B超时?生成式AI多集群配置一致性漏洞(附自动校验脚本)

第一章:生成式AI应用多集群管理 2026奇点智能技术大会(https://ml-summit.org) 生成式AI应用在生产环境中常需跨多个Kubernetes集群部署——例如,模型训练在高性能GPU集群执行,推理服务运行于边缘低延迟集群,而数据预处理与评估则…...

技术拆分的边界划分与接口设计

技术拆分的边界划分与接口设计:构建高效系统的关键 在现代软件开发中,技术拆分的边界划分与接口设计是确保系统可维护性、可扩展性和高效协作的核心。随着业务复杂度的提升,单一系统往往难以应对快速变化的需求,而合理的模块拆分…...

技术债务危机:团队如何从重构中重生?

在当今追求敏捷与快速交付的软件开发浪潮中,“先上线,后优化”的策略已成为许多团队默认的生存法则。然而,这种短期妥协所累积的代价——技术债务,正像一座无形的冰山,悄然侵蚀着软件系统的健康、团队的效率乃至产品的…...

DownKyi实战手册:解锁B站视频下载的完整工作流

DownKyi实战手册:解锁B站视频下载的完整工作流 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。…...

EPLAN拖放操作避坑指南:从符号宏到DWG导入,这些细节错了白忙活

EPLAN拖放操作避坑指南:从符号宏到DWG导入,这些细节错了白忙活 刚接触EPLAN的工程师们,往往会被它强大的拖放功能吸引——毕竟谁不喜欢这种直观高效的操作方式呢?但当你兴冲冲地尝试把DWG文件拖进项目时,却发现系统毫无…...

Qt for Android:基于libusb实现CH340x串口通信的高效开发方案

1. 为什么需要libusb实现CH340x串口通信 在Android开发中,串口通信一直是个让人头疼的问题。特别是当你的设备使用了CH340x这类常见的USB转串口芯片时,问题会更加明显。我去年接手一个工业手持终端项目时就踩过这个坑——Qt自带的QSerialPort在Android高…...

别再乱用`define`了!SystemVerilog枚举类型(enum)的五大进阶用法与避坑指南

别再乱用define了!SystemVerilog枚举类型(enum)的五大进阶用法与避坑指南 在硬件设计领域,我们常常需要定义一组相关的常量。许多工程师的第一反应是使用define宏或者parameter,这就像用螺丝刀当锤子——虽然也能凑合&…...

CAN收发器选型避坑指南:TJA1051T与TJA1051T/3的硬件兼容性问题实录

CAN收发器选型避坑指南:TJA1051T与TJA1051T/3的硬件兼容性问题实录 在嵌入式硬件开发中,CAN总线设计往往被视为"成熟技术"而掉以轻心,直到某天深夜的实验室里,示波器上那串诡异的正弦波打破你的认知——原来最基础的收发…...

CVPR 2024 视频理解技术全景解析:从监控到多模态交互

1. 视频理解技术为何成为CVPR 2024焦点? 去年我在调试一个智能监控系统时,发现传统算法总是把飘动的窗帘误判为异常行为。这种尴尬正是视频理解技术需要突破的痛点——如今的AI不仅要"看得见",更要"看得懂"。CVPR 2024最…...

踩坑教程如何Youtu-Parsing 多格式兼容:TIFF/BMP/WebP 等冷门格式解析避坑指南

一、为什么“多格式兼容”是解析系统的生死线Youtu-Parsing 本质上是“视觉理解 文档结构抽取”的中间引擎。它对输入图像质量、尺寸、色彩、方向都很敏感。你以为只是“读一张图”,实际上至少经历了:文件格式识别解码为像素矩阵色彩空间转换&#xff0…...

计算机毕业设计:Python水产资源监测与产能分析平台 Flask框架 数据分析 可视化 数据大屏 大数据 机器学习 深度学习(建议收藏)✅

博主介绍:✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

新技能分享OpenAI SDK 智能体(Agentic AI)Tools 工具使用详解:从原理到 WebSearch Agent 实战

在大模型应用从“对话问答”走向“可执行系统”的过程中,Agentic AI(智能体)成为最核心的工程方向之一。所谓智能体,不再只是“回答问题”,而是能够理解目标、拆解任务、调用工具、执行动作、观察结果并迭代的系统。 而…...

踩坑实战分享如何在 IntelliJ IDEA 中创建一个包含 JSP 和 Servlet6.0 的 Maven Web 项目,并配置 Tomcat 进行调试

在现代 Java Web 开发体系中,虽然 Spring Boot 早已成为主流,但 JSP Servlet 依然是理解 Web 容器原理、请求响应机制、MVC 分层思想的重要基础。对于初学者来说,能够在 IntelliJ IDEA 中从零创建一个包含 JSP 和 Servlet 6.0 的 Maven Web …...

6DD1602-0AE0处理器模块

Siemens 6DD1602-0AE0 处理器模块是SIMADYN D(PS16)系列中的核心控制单元,用于工业驱动与过程自动化系统中,负责系统运算处理、逻辑控制及模块协调。产品特点16位处理器结构采用16位CPU架构,具备稳定的逻辑运算与数据处…...

2026届毕业生推荐的五大降AI率网站横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek系列论文系统地阐述了混合专家模型也就是MoE与多头潜在注意力即MLA机制的核心创新之…...

深度解析UUV Simulator:从水下动力学到多传感器融合的完整机器人仿真架构

深度解析UUV Simulator:从水下动力学到多传感器融合的完整机器人仿真架构 【免费下载链接】uuv_simulator Gazebo/ROS packages for underwater robotics simulation 项目地址: https://gitcode.com/gh_mirrors/uu/uuv_simulator UUV Simulator作为基于Gazeb…...

2026年鸿蒙应用开发面试题深度解析:从原理到实战,一篇文章搞定HarmonyOS NEXT核心技术栈

📢 鸿蒙技术专家 | 鸿蒙技术交流 微信:添加最下方微信(备注"鸿蒙") ✅ 免费答疑 | ✅ 学习资料 | ✅ 项目指导 | ✅ 内推机会📋 前言:2026年鸿蒙生态爆发式增长,掌握这些面试题让你薪…...

零基础教程:Windows系统快速搭建Minecraft私服并实现公网远程联机

1. 准备工作:搭建Minecraft私服的基础环境 想要和朋友远程联机玩Minecraft,首先得有个自己的服务器。在Windows上搭建其实特别简单,我用这套方法帮十几个朋友搞定了私服。先说说需要准备的东西: 一台配置还行的Windows电脑&#x…...

html标签怎么表示用户输入_kbd标签键盘快捷键标注【介绍】

应使用 <kbd> 标签标记键盘快捷键&#xff0c;如 <kbd>Ctrl</kbd><kbd>C</kbd>&#xff0c;不可合并为 <kbd>CtrlC</kbd>&#xff1b;它语义明确、支持无障碍访问&#xff0c;优于 <code> 或 <span>。HTML 里怎么标键盘…...