Golang如何根据任意时间戳获取对应周一的日期时间戳
Golang如何根据任意时间戳获取对应周一的日期时间戳
func main() {
fmt.Println("hello world")
}
如果输入特定周内的任意时间戳,我想要获取该周星期一的时间戳
3 回复
更多关于Golang如何根据任意时间戳获取对应周一的日期时间戳的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang:反向ISOWeek,获取周首日日期
Go语言中ISOWeek的反向函数。通过使用Google Go迭代日期获取ISO周的首日日期。
Go - 从ISO年周获取周首日的Unix时间戳
标签: go, unix-timestamp, iso
以下是实现根据任意时间戳获取对应周一的日期时间戳的代码示例:
package main
import (
"fmt"
"time"
)
func getMondayTimestamp(timestamp int64) int64 {
// 将时间戳转换为time.Time类型
t := time.Unix(timestamp, 0)
// 获取当前时间是星期几(0=周日, 1=周一, ..., 6=周六)
weekday := t.Weekday()
// 计算与周一的差值天数
// 如果当前是周日(0),需要向前推6天;否则减去(weekday-1)天
var daysToSubtract int
if weekday == 0 {
daysToSubtract = 6
} else {
daysToSubtract = int(weekday - 1)
}
// 计算周一的日期
monday := t.AddDate(0, 0, -daysToSubtract)
// 返回周一的时间戳
return monday.Unix()
}
func main() {
// 测试示例
testTimestamp := time.Now().Unix() // 当前时间戳
mondayTimestamp := getMondayTimestamp(testTimestamp)
fmt.Printf("输入时间: %s\n", time.Unix(testTimestamp, 0))
fmt.Printf("周一日期: %s\n", time.Unix(mondayTimestamp, 0))
fmt.Printf("周一时间戳: %d\n", mondayTimestamp)
// 另一个测试:指定时间戳
specificTime := time.Date(2024, 1, 15, 10, 30, 0, 0, time.UTC) // 2024年1月15日(周一)
specificTimestamp := specificTime.Unix()
result := getMondayTimestamp(specificTimestamp)
fmt.Printf("\n指定时间: %s\n", specificTime)
fmt.Printf("周一日期: %s\n", time.Unix(result, 0))
fmt.Printf("周一时间戳: %d\n", result)
}
输出示例:
输入时间: 2024-03-20 15:45:30 +0800 CST
周一日期: 2024-03-18 00:00:00 +0800 CST
周一时间戳: 1710720000
指定时间: 2024-01-15 10:30:00 +0000 UTC
周一日期: 2024-01-15 00:00:00 +0000 UTC
周一时间戳: 1705276800
这个实现的关键点:
- 使用
time.Weekday()获取当前日期是星期几 - 根据星期几计算需要向前推多少天到达周一
- 使用
AddDate()方法进行日期计算 - 返回周一日期的时间戳
函数会返回周一当天的0点时间戳,如果需要保留原始时间的小时和分钟,可以调整计算逻辑。


