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 main
-
-
import (
-
"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 := 2023
-
month := time.March
-
day := 17
-
hour := 0
-
minute := 0
-
second := 0
-
nano := 0
-
loc := &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 main
-
-
import (
-
"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.Hour
-
t = 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库,包括时间、日期和时区等相关概念及使用方法。通过掌握这些知识,可以更好地处理时间、日期和时区相关的问题,提高开发效率。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbgkeh
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13