Go语言time库,时间和日期相关的操作方法

time库

用于处理时间、日期和时区的核心库。在实际开发中,常常需要与时间打交道,例如记录日志、处理时间差、计算时间间隔等等。因此,掌握time库的使用方法对于Go开发者来说非常重要。

在Go语言中,时间表示为time.Time类型,日期表示为time.Time类型或者time.Date类型,时区表示为time.Location类型。下面将详细介绍这些类型的概念及使用方法。

时间

在Go语言中,时间表示为time.Time类型。time.Time类型是一个结构体,包含两个字段:一个具有 century 和 second 等字段的大整数和一个小整数,分别表示时间的年份和时间的小数部分。

可以使用time包中的函数来获取当前时间、指定时间或者进行时间的加减操作。下面是一些常用的时间操作函数:

time.Now():返回当前本地时间
time.Parse(layout, str):将字符串str解析为指定格式layout的时间
time.Add(d time.Duration):返回当前时间加上给定时间间隔d的结果
time.Sub(t, u time.Time):返回时间t减去时间u的时间间隔

日期

日期表示为time.Time类型或者time.Date类型。其中,time.Time类型表示完整的的时间,包括时分秒等信息;而time.Date类型则只表示日期部分,不包含时间部分。

可以使用time包中的函数来获取指定日期的月份和日数,或者进行日期的加减操作。下面是一些常用的日期操作函数:

time.Month(month int):返回指定的月份的字符串表示
time.Day():返回当前日期中的天数
time.AddDate(year int, month int, day int):返回指定年月日加上给定时间间隔的结果
time.Sub(t, u time.Time):返回时间t减去时间u的时间间隔

时区

时区表示为time.Location类型。time.Location类型是一个结构体,包含一个字符串表示时区的标识符和一些字段,例如seconds 和 bias 等。

可以使用time包中的函数来获取指定时区的偏移量或者进行时区的转换。下面是一些常用的时区操作函数:

time.Local:表示本地时区
time.UTC:表示UTC时区
time.LoadLocation(name string):返回指定时区名称的time.Location类型对象
time.In(loc time.Location, t time.Time):返回指定时区的时间t转换为目标时区loc的结果

函数

time.Now(): 返回当前本地时间。
time.Parse(layout, str): 将字符串 str 解析为指定格式 layout 的时间。
time.Add(d time.Duration): 返回当前时间加上给定时间间隔 d 的结果。
time.Sub(t, u time.Time): 返回时间 t 减去时间 u 的时间间隔。
time.Sub(t, u time.Time) time.Duration: 返回时间 t 减去时间 u 的时间间隔。
time.AddDate(years int, months int, days int) time.Time: 根据年、月、日的增量添加时间。
time.Since(t time.Time) time.Duration: 返回从 t 到现在的时间间隔。
time.Until(u time.Time) time.Duration: 返回从现在到 u 的时间间隔。
t.After(u):如果 t 在 u 之后,返回 true,否则返回 false。
t.Before(u):如果 t 在 u 之前,返回 true,否则返回 false。
time.Unix(sec int64, nanosec int64) time.Time: 将Unix时间戳转换为时间对象。
time.ParseUnix(str string, layout string) (sec int64, nanosec int64,err error): 将时间字符串按照指定格式解析为Unix时间戳。
time.Set(sec int64, n int) time.Time: 将当前时间设置为给定的秒数和纳秒数。
time.Sleep(d Duration): 以让程序在执行过程中暂停一段时间。
time.Hour() int: 返回当前小时的整数值。
time.Minute() int: 返回当前分钟的整数值。
time.Second() int: 返回当前秒的整数值。
time.Nanosecond() int: 返回当前纳秒的整数值。
time.Weekday() time.Weekday: 返回当前星期几的枚举值。
time.Day(): 返回当前日期的日数。
time.Month() time.Month: 返回当前月份的枚举值。
time.Year() int: 返回当前年份的整数值。
time.Date(year int, month time.Month, day, hour, min, sec, nanosec int, loc *time.Location) time.Time: 返回指定时间的本地时间对象。
time.isleap(year int) bool: 判断给定的年份是否为闰年。
time.UnixNano() int64: 返回当前时间的纳秒值。
time.Duration() time.Duration: 返回从0时0分0秒到现在的纳秒数。
time.ParseDuration(str string) (time.Duration, error): 将时间间隔字符串解析为时间间隔。
time.ParseInLocation(layout string, value string, loc *time.Location) (time.Time, error): 根据格式和时间值,解析时间,并指定时区。
time.StartOfDay(): 返回当前日期的开始时间。
time.EndOfDay(): 返回当前日期的结束时间。
time.StartOfWeek(): 返回当前日期所在周的周一。
time.EndOfWeek(): 返回当前日期所在周的周日。
time.StartOfMonth(): 返回当前月份的开始时间。
time.EndOfMonth(): 返回当前月份的结束时间。
time.StartOfYear(): 返回当前年份的开始时间。
time.EndOfYear(): 返回当前年份的结束时间。
time.Sunday: 返回星期几的枚举值,0为星期日,6为星期六,以此类推。
time.ParseDuration(str string) (time.Duration, error): 将时间间隔字符串解析为时间间隔。
time.Hour() time.Duration: 返回当前小时的时间间隔。
time.Minute() time.Duration: 返回当前分钟的时间间隔。
time.Second() time.Duration: 返回当前秒的时间间隔。
time.Nano() time.Duration: 返回当前纳秒的时间间隔。
time.ANSIC() string: 返回对应于 ANSI C 的字符串表示的日期时间。
time.FixedZone(name string, offset int) *time.Location: 返回一个固定时区对象。
time.LoadLocation(name string) (*time.Location, error): 加载一个时区对象。
time.In(t time.Time, loc *time.Location) time.Time: 将时间 t 转换为指定时区的时间。

类型

Time:表示时间点,包括日期和时间。
Date:表示日期,包括年、月、日。
LocalTime:表示本地时间。
Location:表示时区。
ZeroTime:表示时间的零点,即 1970 年 1 月 1 日 00:00:00 UTC。
Duration:它表示时间段,可以用纳秒、微秒、毫秒、秒等为单位。

示例

代码1

package mainimport ("fmt""time"
)func main() {// 获取当前时间currentTime := time.Now()fmt.Println("Current Time:", currentTime)// 暂停程序执行 5 秒钟fmt.Print("Waiting for 5 seconds: ")for i := 0; i < 5; i += 1 {time.Sleep(time.Second)fmt.Print(".")}fmt.Println()// 获取指定日期的本地时间year := 2023month := time.Marchday := 17hour := 0minute := 0second := 0nano := 0loc := &time.Location{}date := time.Date(year, month, day, hour, minute, second, nano, loc)fmt.Println("Date:", date)// 将时间字符串转换为时间对象layout := "2006-01-02 15:04:05"value := "2023-03-23 08:30:00"parsedTime, err := time.Parse(layout, value)if err != nil {fmt.Println("Error:", err)return}fmt.Println("Parsed Time:", parsedTime)// 格式化时间对象为字符串format := "2006-01-02 15:04:05 MST"formattedTime := parsedTime.Format(format)fmt.Println("Formatted Time:", formattedTime)// 计算两个时间之间的时间差t2 := time.Now()diff := t2.Sub(parsedTime)fmt.Println("Time Difference:", diff)// 将时间对象转换为UTC时区utcTime := parsedTime.UTC()fmt.Println("UTC Time:", utcTime)// 将时间对象转换为本地时区localTime := parsedTime.In(time.Local)fmt.Println("Local Time:", localTime)
}

输出:

Current Time: 2023-08-01 20:15:11.0034059 +0800 CST
Waiting for 5 seconds: .....
Date: 2023-03-17 00:00:00 +0000 UTC
Parsed Time: 2023-03-23 08:30:00 +0000 UTC
Formatted Time: 2023-03-23 08:30:00 UTC
Time Difference: 3147h45m16.0065551s
UTC Time: 2023-03-23 08:30:00 +0000 UTC
Local Time: 2023-03-23 16:30:00 +0800 CST

代码2

package mainimport ("fmt""time"
)func main() {// 解析时间字符串为时间对象layout := "2006-01-02 15:04:05"strTime := "2023-03-23 12:30:00"t, err := time.Parse(layout, strTime)if err != nil {fmt.Println("时间解析错误:", err)}fmt.Println("解析后的时间:", t)// 时间加减d := time.Duration(24) * time.Hourt = t.Add(d)fmt.Println("加上一天的时间:", t)u := t.Add(-d)fmt.Println("减去一天的时间:", u)// 时间间隔diff := t.Sub(u)fmt.Println("加上一天和减去一天的时间间隔:", diff)// 时间格式化输出layout = "2006-01-02"t = time.Now()formattedTime := t.Format(layout)fmt.Println("格式化后的时间:", formattedTime)// 时间转换为Unix时间戳unixTime := t.Unix()fmt.Println("Unix时间戳:", unixTime)// 时间比较t1 := time.Now()t2 := t1.Add(time.Hour)diff = t2.Sub(t1)fmt.Println("t2 - t1 =", diff)fmt.Println("t1 < t2:", t1.Before(t2))fmt.Println("t2 > t1:", t2.After(t1))
}

输出:

解析后的时间: 2023-03-23 12:30:00 +0000 UTC
加上一天的时间: 2023-03-24 12:30:00 +0000 UTC
减去一天的时间: 2023-03-23 12:30:00 +0000 UTC
加上一天和减去一天的时间间隔: 24h0m0s
格式化后的时间: 2023-08-01
Unix时间戳: 1690892235
t2 - t1 = 1h0m0s
t1 < t2: true
t2 > t1: true


总结

本文介绍了Go语言中的time库,包括时间、日期和时区等相关概念及使用方法。通过掌握这些知识,可以更好地处理时间、日期和时区相关的问题,提高开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/55158.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贝叶斯学习

贝叶斯 贝叶斯学习的背景贝叶斯定理举例 概览选择假设— MAPMAP举例 选择假设 — 极大似然 MLML 举例: 抛硬币问题 极大似然 & 最小二乘Nave Bayesian Classifier (朴素贝叶斯分类器)举例1&#xff1a;词义消歧 (Word Sense Disambiguation)举例 2: 垃圾邮件过滤 从垃圾邮件…

一个.NET开发的Web版Redis管理工具

今天给大家推荐一款web 版的Redis可视化工具WebRedisManager&#xff0c;即可以作为单机的web 版的Redis可视化工具来使用&#xff0c;也可以挂在服务器上多人管理使用的web 版的Redis可视化工具。 WebRedisManager基于SAEA.Socket通信框架中的SAEA.RedisSocket、SAEA.WebApi两…

【Linux】进程信号中的 core dump 标记位

进程信号中的 core dump 标记位 一、什么是core dump二、core dump的使用1、开启core dump2、生成core file文件3、验证进程退出码里面的core dump标志位 三、 core dump的应用 一、什么是core dump 我们知道所有的程序最终运行起来&#xff0c;都会变成进程&#xff0c;进程在…

IL汇编语言读取控制台输入和转换为整数

新建一个testcvt.il&#xff1b; .assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() cil managed{.maxstack 1.entrypointldstr "\n请输入一个数字:"call void [mscorlib]System.Console::Write(string)call st…

PHP使用PhpSpreadsheet实现导出Excel时带下拉框列表 (可支持三级联动)

因项目需要导出Excel表 需要支持下拉 且 还需要支持三级联动功能 目前应为PHPExcel 不在维护&#xff0c;固采用 PhpSpreadsheet 效果如图&#xff1a; 第一步&#xff1a;首先 使用composer 获取PhpSpreadsheet 我这里PHP 版本 7.4 命令如下&#xff1a; composer r…

js-7:javascript原型、原型链及其特点

1、原型 JavaScript常被描述为一种基于原型的语言-每个对象拥有一个原型对象。 当试图访问一个对象的属性时&#xff0c;它不仅仅在该对象上搜寻&#xff0c;还会搜寻该对象的原型&#xff0c;以及该对象的原型的原型&#xff0c;依次层层向上搜索&#xff0c;直到找到一个名字…

基于边缘无线协同感知的低功耗物联网LPIOT技术:赋能智慧园区方案以及数字工厂领域

回到2000年左右&#xff0c;物联网的底层技术支撑还是“ZigBee”&#xff0c;虽然当时ZigBee的终端功耗指标其实也并不庞大&#xff0c;但是&#xff0c;“拓扑复杂导致工程实施难度大”、“网络规模小导致的整体效率低下”都成为限制其发展的主要因素。 LPWAN&#xff0c;新一…

TP4056锂电池充电模块 1A线性锂离子电池充电器

概述 TP4056是一款性能优异的单节锂离子电池恒流/恒压线性充电器。TP4056采用ESOP8封装配合较少的外围原件使其非 常适用于便携式产品&#xff0c;并且适合给USB电源以及适配器电源供电。 基于特殊的内部MOSFET架构以及防倒充电路&#xff0c;TP4056不需要外接检测电阻和隔离二…

GIS在地质灾害危险性评估与灾后重建中的应用教程

详情点击链接&#xff1a;GIS在地质灾害危险性评估与灾后重建中的实践技术应用 前言 地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质…

HIVE学习

1.什么是HIVE 1.HIVE是什么? Hive是由Facebook开源&#xff0c;基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能。 大白话: HIVE就是一个类似于Navicat的可视化客户端, 2.HIVE本质 Hive是一个Hadoop客户端&a…

《面试1v1》ElasticSearch基础

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

Django使用uwsgi+nginx部署,admin没有样式解决办法

Django使用uwsginginx部署,admin没有样式解决办法 如果使用了虚拟环境则修改nginx.conf文件中的/static/路径为你虚拟环境的路径&#xff0c;没有使用虚拟环境则改为你python安装路径下的static server {listen 8008;server_name location; #改为自己的域名&#xff0c;没域名…