golang time 时间的加减法

time包中的Add和Sub的用法,Add用于计算某个时间之前和之后的时间点,Sub用于计算两个时间差

package main

import (
	"fmt"
	"strings"
	"time"
)

func main() {
	// Add 时间相加
	now := time.Now()
	// ParseDuration parses a duration string.
	// A duration string is a possibly signed sequence of decimal numbers,
	// each with optional fraction and a unit suffix,
	// such as "300ms", "-1.5h" or "2h45m".
	//  Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
	// 10分钟前
	m, _ := time.ParseDuration("-1m")
	m1 := now.Add(m)
	fmt.Println(m1)

	// 8个小时前
	h, _ := time.ParseDuration("-1h")
	h1 := now.Add(8 * h)
	fmt.Println(h1)

	// 一天前
	d, _ := time.ParseDuration("-24h")
	d1 := now.Add(d)
	fmt.Println(d1)

	printSplit(50)

	// 10分钟后
	mm, _ := time.ParseDuration("1m")
	mm1 := now.Add(mm)
	fmt.Println(mm1)

	// 8小时后
	hh, _ := time.ParseDuration("1h")
	hh1 := now.Add(hh)
	fmt.Println(hh1)

	// 一天后
	dd, _ := time.ParseDuration("24h")
	dd1 := now.Add(dd)
	fmt.Println(dd1)

	printSplit(50)

	// Sub 计算两个时间差
	subM := now.Sub(m1)
	fmt.Println(subM.Minutes(), "分钟")

	sumH := now.Sub(h1)
	fmt.Println(sumH.Hours(), "小时")

	sumD := now.Sub(d1)
	fmt.Printf("%v 天\n", sumD.Hours()/24)

}

func printSplit(count int) {
	fmt.Println(strings.Repeat("#", count))
}


### Golang 中 `time` 包的用法与示例 Golang 的 `time` 包提供了丰富的功能来处理时间相关的操作,包括获取当前时间、计算时间差、定时器以及间隔执行等功能。以下是关于该包的一些常见用法及其例子。 #### 获取当前时间 通过调用 `time.Now()` 方法可以轻松获得当前的时间戳对象。此方法返回的是一个 `Time` 类型的对象,包含了日期和时间的信息。 ```go now := time.Now() fmt.Println("Current Time:", now) ``` #### 时间格式化 为了将时间转换为字符串形式或者解析字符串到时间对象,可以利用预定义布局常量如 `time.RFC3339` 或者自定义布局模式来进行格式化。 ```go formattedTime := now.Format(time.RFC3339) fmt.Println("Formatted Time (RFC3339):", formattedTime) customLayout := "02-Jan-2006 15:04" customFormattedTime := now.Format(customLayout) fmt.Println("Custom Formatted Time:", customFormattedTime) ``` #### 计算两个时间之间的差异 可以通过简单的减法运算符 `-` 来得到两个时间点之间相差的具体秒数或者其他单位的数量。 ```go later := now.Add(5 * time.Minute) // 增加五分钟后的时刻 diff := later.Sub(now).Minutes() fmt.Printf("Difference in Minutes:%v\n", diff) ``` #### 使用 Timer 和 Ticker 实现延迟或周期性任务调度 对于需要等待一段时间再继续运行的任务来说,Timer 是非常有用的工具;而如果希望每隔固定时间段重复做某件事,则应该考虑使用Ticker[^1]。 ```go // 创建一个新的计时器设置为两秒钟超时. timer := time.NewTimer(2 * time.Second) <-timer.C fmt.Println("Two seconds have passed") ticker := time.NewTicker(500 * time.Millisecond) done := make(chan bool) go func(){ for t:= range ticker.C{ fmt.Println("Tick at ",t) } }() time.Sleep(1600*time.Millisecond) ticker.Stop() close(done) fmt.Println("Ticker stopped.") ``` 尽管上述内容涵盖了大部分基本需求,但在实际开发过程中还可能遇到更复杂的情况比如跨时区调整等问题[^2], 这就需要进一步深入研究官方文档并结合具体应用场景灵活运用了.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值