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

这篇具有很好参考价值的文章主要介绍了Go语言time库,时间和日期相关的操作方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Go语言time库,时间和日期相关的操作方法,Golang,golang,算法,开发语言

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.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库,包括时间、日期和时区等相关概念及使用方法。通过掌握这些知识,可以更好地处理时间、日期和时区相关的问题,提高开发效率。文章来源地址https://www.toymoban.com/news/detail-622254.html

到了这里,关于Go语言time库,时间和日期相关的操作方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL DTAETIME、TIMESTAMP、DATE、TIME、YEAR(日期和时间类型)

    MySQL 中有多处表示日期的数据类型: YEAR 、 TIME 、 DATE 、 DTAETIME 、 TIMESTAMP 。当只记录年信息的时候,可以只使用 YEAR 类型。 每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。 下表中列出了 MySQL 中的日期与时间类型。 类型名称 日

    2023年04月14日
    浏览(44)
  • linux ls命令 --time-style选项 日期时间格式控制

    语法格式: s -l --time-style=xxx命令可以显示时间的格式,xxx:full-iso, long-iso, iso, locale, +FORMAT, ls -l --time-style=full-iso 显示全部时间,包括毫秒在内如: drwxr-xr-x 2 boco boco 4096 2013-10-16 14:49:57.000000000 +0800 Deskt ls -l --time-style=long-iso 显示日期和时间(包括年),以长格式显示yyyy-mm-dd

    2024年02月14日
    浏览(38)
  • 19 Go的时间日期

    概述         在上一节的内容中,我们介绍了Go的Gob,包括:Gob简介、Gob编码、Gob解码等。在本节中,我们将介绍Go的时间日期。Go语言提供了一套强大的时间日期处理库,使得处理时间和日期变得简单和高效。Go语言中处理日期和时间的常用方式是使用time包,这个包提供

    2024年02月05日
    浏览(35)
  • 【JAVA进阶篇】时间与日期相关类

    2023年06月26日
    浏览(40)
  • hutool日期工具类相关:获取某月所有周、某周的起止时间或所有日期、计算连续天数

    最近做项目,碰到一个比较复杂的日期查询方式,在这里记录一下,方便以后忘了随时能查到。 像我们一般查询日期,页面上用的日期选择器,一般都是直接查某一天或者选择开始、结束时间,查一个范围。不过这次需要我们按某月的某周来查询,比如页面上直接显示这个月

    2024年02月02日
    浏览(49)
  • 前端中不同格式的日期相互转换(字符串、时间戳)js相关

    在项目中遇到了,需要实现字符串和Unix时间戳的相互转换,随手记录一下。 我使用的组件库为Naive UI,涉及到的组件为日期选择器(Date Picker)。作者在文档中写道: 实话说我不喜欢这个 feature,因为多数情况下,传递时间字符串不是个最佳实践。但是现实世界是复杂的,我

    2024年02月02日
    浏览(70)
  • Golang:Go语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 表达式 注释 接下来让我们来看下简单的代码,该代码输出了\\\"Hello World!\\\": 让我们来看下以上程序的各个部分: 第一

    2024年02月10日
    浏览(59)
  • R语言 | 日期和时间的处理

    目录 一、日期的设定与使用 1.1 as.Date()函数 1.2 weekdays()函数 1.3 months()函数 1.4 quarters()函数 1.5 Sys.localeconv()函数 1.6 Sys.Date()函数 1.7 再谈seq()函数 1.8 使用不同格式表示日期  二、时间的设定与使用 2.1 Sys.time()函数 2.2 as.POSIXct()函数 2.3 时间也是可以做比较的 2.4  seq()函数与时间

    2024年02月02日
    浏览(36)
  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(60)
  • Go语言(Golang)数据库编程

    要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。 sql.Open() 数据库驱动的名称 数据源名称 得到一个指向 sql.DB 这个 struct 的指针 sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会

    2024年02月03日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包