Golang如何根据任意时间戳获取对应周一的日期时间戳

Golang如何根据任意时间戳获取对应周一的日期时间戳

func main() {
    fmt.Println("hello world")
}

如果输入特定周内的任意时间戳,我想要获取该周星期一的时间戳

3 回复

这更加简单了 😉

GitHub GitHub

头像

jinzhu/now

Now 是一个用于 Golang 的时间工具包。通过在 GitHub 上创建账户来为 jinzhu/now 的开发做出贡献。

更多关于Golang如何根据任意时间戳获取对应周一的日期时间戳的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


日历

Golang:反向ISOWeek,获取周首日日期

Go语言中ISOWeek的反向函数。通过使用Google Go迭代日期获取ISO周的首日日期。


Centzon Totochtin

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

这个实现的关键点:

  1. 使用time.Weekday()获取当前日期是星期几
  2. 根据星期几计算需要向前推多少天到达周一
  3. 使用AddDate()方法进行日期计算
  4. 返回周一日期的时间戳

函数会返回周一当天的0点时间戳,如果需要保留原始时间的小时和分钟,可以调整计算逻辑。

回到顶部