Golang 中的 time 包详解(四):函数详解
在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 time 包,本文讲解一下 time 包中的函数。
func Now() Time
返回当前的系统时间。
package mainimport ("fmt""time"
)func main() {now := time.Now() fmt.Println(now.Unix())
}
func Parse(layout, value string) (Time, error)
将字符串解析为时间类型,并返回对应的 Time 对象。layout 参数是表示时间的格式,例如"2006-01-02 15:04:05"表示年、月、日、时、分、秒的格式。
package mainimport ("fmt""time"
)func main() {layout := "2006-01-02 15:04:05" str := "2023-07-19 12:34:56" t, _ := time.Parse(layout, str) fmt.Println(t)
}
func ParseDuration(s string) (Duration, error)
用于将字符串解析为 Duration 类型。
package mainimport ("fmt""time"
)func main() {durationStr := "2h45m"duration, err := time.ParseDuration(durationStr)if err != nil {fmt.Println("解析持续时间错误:", err)return}fmt.Printf("解析后的持续时间为:%v\n", duration)
}
func ParseInLocation(layout, value string, loc *Location) (Time, error)
用于将字符串解析为 Time 类型,并在指定的时区中解析时间。
package mainimport ("fmt""time"
)func main() {location := time.FixedZone("CustomZone", 2*60*60) // 创建一个偏移量为2小时的固定时区timeString := "2023-07-18 14:30:00" // 要解析的字符串t, err := time.ParseInLocation("2006-01-02 15:04:05", timeString, location)if err != nil {fmt.Println("解析时间错误:", err)return}fmt.Printf("解析后的时间为:%v\n", t)
}
func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
根据给定的年、月、日、时、分、秒和纳秒创建一个 Time 对象,loc 参数表示时区。
package mainimport ("fmt""time"
)func main() {t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC) fmt.Println(t)
}
func Since(t Time) Duration
返回从当前时间到 t 之间的时间差,以纳秒为单位。
package mainimport ("fmt""time"
)func main() {t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC) duration := time.Since(t) fmt.Println(duration)
}
func Until(t Time) Duration
返回从 t 到当前时间之间的时间差,以纳秒为单位。
package mainimport ("fmt""time"
)func main() {t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC) duration := time.Until(t) fmt.Println(duration)
}
func After(d Duration) <-chan Time
用于创建一个通道,将在指定的时间间隔后向通道发送一个 time.Time 类型的值。
package mainimport ("fmt""time"
)func main() {// 创建一个将在5秒后发送值的通道timer := time.After(5 * time.Second)// 等待通道发送值fmt.Println(<-timer)
}
func AfterFunc(d Duration, f func()) *Timer
用于创建一个定时器,并在指定的时间间隔后执行一个函数。
package mainimport ("fmt""time"
)func main() {// 创建一个将在5秒后触发的定时器timer := time.AfterFunc(5*time.Second, func() {fmt.Println("路多辛的博客!")})// 停止定时器time.Sleep(10 * time.Second)timer.Stop()// 输出:路多辛的博客!fmt.Println("Program ended")
}
func Unix(sec int64, nsec int64) Time
用于将 Unix 时间戳转换为时间类型。
package mainimport ("fmt""time"
)func main() {// 定义一个Unix时间戳unixTime := int64(1691587957)// 使用time.Unix函数将Unix时间戳转换为时间类型t := time.Unix(unixTime, 0)// 打印结果fmt.Println(t)
}
func UnixMilli(msec int64) Time
用于将毫秒时间戳转换为时间类型。
package mainimport ("fmt""time"
)func main() {t := time.UnixMilli(1691587957000)// 打印结果fmt.Println(t)
}
func UnixMicro(usec int64) Time
用于将微秒时间戳转换为时间类型。
package mainimport ("fmt""time"
)func main() {t := time.UnixMilli(1691587957000000)// 打印结果fmt.Println(t)
}
func Tick(d Duration) <-chan Time
用于创建一个定时器,该定时器每隔一定的时间间隔就会向通道发送当前的时间。
package mainimport ("fmt""time"
)func main() {// 创建一个每隔1秒进行一次打印的定时器ticker := time.Tick(1 * time.Second)for {<-ticker // 等待定时器的发送fmt.Println("这是ticker的打印")}
}
func LoadLocation(name string) (*Location, error)
用于加载并返回一个特定的时区。
package mainimport ("fmt""time"
)func main() {// 加载"Asia/Shanghai"时区location, err := time.LoadLocation("Asia/Shanghai")if err != nil {fmt.Println("无法加载时区:", err)return}// 使用该时区创建一个时间对象t := time.Now().In(location)fmt.Println("当前时间:", t)
}
func LoadLocationFromTZData(name string, data []byte) (*Location, error)
用于从 TZ 数据中加载并返回一个时区。
package mainimport ("fmt""time"
)func main() {// 加载"Asia/Shanghai"时区location, err := time.LoadLocationFromTZData("Asia/Shanghai")if err != nil {fmt.Println("无法加载时区:", err)return}// 使用该时区创建一个时间对象t := time.Now().In(location)fmt.Println("当前时间:", t)
}
func FixedZone(name string, offset int) *Location
用于创建一个具有固定偏移量的时区。
package mainimport ("fmt""time"
)func main() {// 创建一个偏移量为2小时的固定时区location := time.FixedZone("CustomZone", 2*60*60)// 使用该时区创建一个时间对象t := time.Now().In(location)fmt.Println("当前时间:", t)
}
func NewTicker(d Duration) *Ticker
用于创建一个新的 Ticker 对象,该对象可以在指定的时间间隔重复发送 Time 值。
package mainimport ("fmt""time"
)func main() {// 创建一个每秒发送一次的 Ticker 对象ticker := time.NewTicker(1 * time.Second)defer ticker.Stop()for {select {case <-ticker.C:fmt.Println("打印一次路多辛的博客")}}
}
func NewTimer(d Duration) *Timer
用于创建一个新的 Timer 对象,该对象可以在指定的时间间隔后发送一个 Time 类型的值。
package mainimport ("fmt""time"
)func main() {// 创建一个定时器,在2秒后发送一个时间值timer := time.NewTimer(2 * time.Second)defer timer.Stop()// 使用定时器发送的时间值处理函数timerHandler := func() {fmt.Println("收到时间值")}// 在定时器发送时间值之前执行处理函数go timerHandler()// 等待定时器发送时间值select {case <-timer.C:fmt.Println("定时器已发送时间值")}
}
func Sleep(d Duration)
让当前的 goroutine 休眠指定的时间。
package mainimport ("fmt""time"
)func main() {fmt.Println("开始休眠")time.Sleep(2 * time.Second)fmt.Println("休眠结束")
}
相关文章:
Golang 中的 time 包详解(四):函数详解
在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 time 包,本文讲解一下 time 包中的函数。 func Now() Time 返回当前的系统时间。 package mai…...
【前端 | CSS】5种经典布局
页面布局是样式开发的第一步,也是 CSS 最重要的功能之一。 常用的页面布局,其实就那么几个。下面我会介绍5个经典布局,只要掌握了它们,就能应对绝大多数常规页面。 这几个布局都是自适应的,自动适配桌面设备和移动设备…...
腾讯云宣布VPC网络架构重磅升级,可毫秒级感知网络故障并实现自愈
8月11日,腾讯云宣布VPC(Virtual Private Cloud,云私有网络)架构重磅升级。新架构采用多项腾讯核心自研技术,能够支撑用户构建业界最大 300万节点超大规模单VPC网络,并将转发性能最大提升至业界领先的200Gbp…...
vue 路由页面跳转
从index.vue跳转到data.vue index.vue <el-table-column label"客户数" align"center" :show-overflow-tooltip"true"><template slot-scope"scope"><router-link :to"/system/enterprise-data/index/ scope.ro…...
Vue toRefs:在Vue中不失去响应式的情况下解构属性
Vue toRefs:在Vue中不失去响应式的情况下解构属性 文章目录 Vue toRefs:在Vue中不失去响应式的情况下解构属性什么是响应式?解构Props的挑战使用toRefs保持响应式结论 在Vue开发中,我们经常会在组件之间传递数据。这时候ÿ…...
自定义element-plus的弹框样式
项目中弹框使用频繁,需要统一样式风格,此组件可以自定义弹框的头部样式和内容 一、文件结构如下: 二、自定义myDialog组件 需求: 1.自定义弹框头部背景样式和文字 2.自定义弹框内容 3.基本业务流程框架 components/myDialog/index.vue完整代码: &…...
Linux:iptables防火墙
目录 绪论 1、防火墙 1.1 保护范围 1.2 网络协议划分 1.3 协议:tcp 1.4 四表 1.5 五链 1.6 iptables的规则 1.7 匹配顺序 流入本机:prerouting ------->iuput---------->用户进程(httpd服务)------请求--------响应--------->数据要返…...
MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoTemplate完成增删改查
传送门: MongoDB文档--基本概念_一单成的博客-CSDN博客 MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客 MongoDB文档--基本安装-linux安装&…...
设计模式十四:责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求。 在责任链模式中,多个处理者对象被连接成一个链。当接收到一个请求时…...
将商城项目放到docker-centos7中
1、docker pull centos:7 2、docker run -d -it --privileged 仓库名称/shopcentos:1.1 /usr/sbin/init 注意: /usr/sbin/init 必须加,否则没法使用systemctl启动mysql 3、安装mysql教程 安装msyql教程:https://blog.csdn.net/davice_li…...
C# Winform 自动获取 软件版本号
C# Winform如何自动获取版本号 方案一 缺点是不适配,clickones发布的版本 public static string GetVersion() {try {return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();}catch{return System.Ref…...
基于C++实现了最小反馈弧集问题的三种近似算法(GreedyFAS、SortFAS、PageRankFAS)
该项目是一个基于链式前向星存图、boost(boost::hash、asio线程池)以及emhash7/8的非官方实现,实现了最小反馈弧集问题的三种近似算法。该问题是在有向图中找到最小的反馈弧集,其中反馈弧集是指一组弧,使得从这些反馈弧…...
奶牛用餐 优先队列 java
👨🏫 奶牛用餐 约翰的农场有 n n n 头奶牛,编号 1 s i m n 1 \\sim n 1simn。 每天奶牛们都要去食堂用餐。 食堂一共有 k k k 个座位,也就是说同一时间最多可以容纳 k k k 头奶牛同时用餐。 已知,第 i i i …...
包管理机制pip3
pip3 安装pip3 安装pip3 apt install python3-pip yum install python3-pip从仓库出发的命令 查询仓库信息 // 获取默认pip3源 pip3 config get global.index-url查询所有软件包 查询已经安装的所有软件包 pip3 list从软件包出发的命令 从软件包名出发查询其他信息 查询…...
liunx在线安装tomcat
1、在线安装 https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.91/bin/apache-tomcat-8.5.91.tar.gz 执行:wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.91/bin/apache-tomcat-8.5.91.tar.gz ps:或者直接把tar.gz扔服务器 2、 编…...
导入示例工程出现error: failed to start ability. Error while Launching activity错误的解决办法
导入华为健康生活应用(ArkTS),使用DevEco Studio打开,运行报错: error: failed to start ability. Error while Launching activity解决办法:修改module.json5里面exported的值,由false改为tr…...
【深入了解PyTorch】PyTorch分布式训练:多GPU、数据并行与模型并行
【深入了解PyTorch】PyTorch分布式训练:多GPU、数据并行与模型并行 PyTorch分布式训练:多GPU、数据并行与模型并行1. 分布式训练简介2. 多GPU训练3. 数据并行4. 模型并行5. 总结PyTorch分布式训练:多GPU、数据并行与模型并行 在深度学习领域,模型的复杂性和数据集的巨大规…...
linux 下 网卡命名改名
Linux 操作系统的网卡设备的传统命名方式是 eth0、eth1、eth2等,而 CentOS7 提供了不同的命名规则,默认是网卡命名会根据网卡的硬件信息,插槽位置等有关;来分配。这样做的优点是命名全自动的、可预知的,缺点是比 eth0、…...
6.2.0在线编辑:GrapeCity Documents for Word (GcWord) Crack
GrapeCity Word 文档 (GcWord) 支持 Office Math 函数以及转换为 MathML GcWord 现在支持在 Word 文档中创建和编辑 Office Math 内容。GcWord 中的 OMath 支持包括完整的 API,可处理科学、数学和通用 Word 文档中广泛使用的数学符号、公式和方程。以下是通过 OMa…...
为什么需要智能指针?
为什么需要智能指针? 解决忘记释放内存导致内存泄漏的问题。解决异常安全问题。 #include<iostream> using namespace std;int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; } void Func(…...
告别手动计数!STM32定时器主从模式新玩法:TIM3+TIM4自动发完脉冲就停
STM32定时器主从模式实战:精准脉冲控制的工程艺术 在嵌入式系统开发中,精确控制脉冲数量是许多应用场景的核心需求——从步进电机驱动到LED灯带控制,再到伺服系统定位。传统方案往往依赖CPU持续监控和软件计数,不仅占用宝贵的处理…...
ESP32玩转LVGL8.1:用Style Line画个自定义仪表盘,告别图片素材
ESP32玩转LVGL8.1:用Style Line画个自定义仪表盘,告别图片素材 在嵌入式设备开发中,UI设计往往面临存储资源紧张的挑战。传统方案依赖图片素材,不仅占用宝贵的Flash空间,还缺乏灵活性。LVGL8.1的Style Line功能为我们提…...
别再只盯着铜箔了!FPC软板选材实战:从PI基材到屏蔽膜,工程师避坑指南
FPC软板选材实战:从基材到屏蔽层的工程决策指南 在可穿戴设备折叠屏和车载摄像头小型化的浪潮中,柔性印刷电路板(FPC)正经历前所未有的技术迭代。当某头部TWS耳机厂商因基材选择失误导致批量性断裂时,当新能源汽车摄像头模组因屏蔽材料失效引…...
当pywinauto遇上pytesseract:手把手教你破解Windows客户端自动化中的‘盲点’(以企业微信为例)
当pywinauto遇上pytesseract:构建混合型Windows客户端自动化解决方案 企业微信这类桌面应用的自动化操作一直是RPA开发者的痛点——传统控件识别工具在面对动态元素、非标准界面时常常失效。本文将揭示如何通过pywinauto与pytesseract的协同作战,打造适…...
宏基因组病毒序列识别六剑客:geNomad, DeepVirFinder, VirSorter2, VIBRANT, PPR-Meta, viralVerify 实战部署与结果整合
1. 宏基因组病毒序列识别工具概述 在宏基因组研究中,病毒序列的识别一直是个技术难点。传统的BLAST比对方法虽然直观,但面对海量数据时效率低下,且容易遗漏新型病毒。近年来,随着机器学习技术的普及,一批专门针对病毒序…...
Simulink Autosar开发:手把手教你配置PortParameter实现参数通信(附ARXML解析)
Simulink Autosar开发:手把手教你配置PortParameter实现参数通信(附ARXML解析) 在汽车电子软件开发中,AUTOSAR标准已经成为行业通用架构。其中,参数通信机制是软件组件(SWC)间数据交互的核心功能之一。本文将深入探讨基…...
【Flink实战指南】基于Table API与SQL Client的Catalog统一管理实践
1. 为什么需要统一管理Catalog? 在Flink的实际应用中,我们经常会遇到这样的场景:数据分散在不同的存储系统中,比如Hive、MySQL、Kafka等。每次操作这些数据时,都需要手动指定对应的连接信息,不仅效率低下&a…...
告别小程序富文本难题:mp-html组件实战指南
告别小程序富文本难题:mp-html组件实战指南 【免费下载链接】mp-html 小程序富文本组件,支持渲染和编辑 html,支持在微信、QQ、百度、支付宝、头条和 uni-app 平台使用 项目地址: https://gitcode.com/gh_mirrors/mp/mp-html 在小程序…...
代码随想录—day11—栈与队列(part2)
题例:150. 逆波兰表达式求值 - 力扣(LeetCode) 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。每个操作数&a…...
MyBatis-Plus 3.5升级后,分页插件PaginationInterceptor报错?手把手教你换成PaginationInnerInterceptor
MyBatis-Plus 3.5升级后分页插件报错全解析:从问题定位到完美修复 最近在升级MyBatis-Plus到3.5版本后,不少开发者发现原本运行良好的分页功能突然报错,控制台抛出各种异常信息。这实际上是MyBatis-Plus团队对分页机制进行了重构导致的兼容性…...
