date - golang 中的 ISOWeek() 没有返回一年中一周的期望值

标签 date go time isodate

下面的程序没有返回想要的值

package main

import (
    "fmt"
    "time"
)

func main() {
    t:= time.Date(2011, 1, 1, 0, 0, 0, 0, time.UTC)
    _, week := t.ISOWeek()
    fmt.Printf("\nWeek of the year: %v\n", week)


}

返回

52

代替

1

对我来说,一年的第一天必须在一年的第一周是有道理的。我在文档中找不到替代函数

最佳答案

查看docs .特别是“周的范围从 1 到 53。n 年的 1 月 1 日到 1 月 3 日可能属于 n-1 年的第 52 或 53 周,而 12 月 29 日到 12 月 31 日可能属于 n+1 年的第 1 周”

主要是你假设一年有 52 周是错误的。这就是您感到困惑的原因。

Go 对第 52 周的计算与所有其他编程语言相同。请看this JavaScript该日期的实现,请注意它也提供 52 作为一周。

您要求的功能不准确或不实用,这就是语言中不存在此类功能的原因。为了使该功能发挥作用,必须在年初和年底中断几周。也许您没有意识到一周被定义为 7 天,不同的国家和文化在不同的日子开始和结束他们的一周。

您可以简单地编写一个函数来完成您对“周”的定义,但标准库中没有。

关于date - golang 中的 ISOWeek() 没有返回一年中一周的期望值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51566166/

相关文章:

date - Grails插入并在脚手架上显示错误的日期值

go: regexp:FindAll() 中的 n 参数是什么

time - 分布式时间同步和Web应用程序

Asp.net 时间输入控制建议

php - Codeigniter REST API 耗时

python - 将 "unknown format"字符串转换为日期时间对象?

javascript - Firefox 中的无效日期 - Javascript

go - 如何自动将依赖包添加到 go.mod

sql - 选择从时间戳到时间戳的所有日期间隔

reactjs - 发送到我的服务器时,“使用Google登录” JWT无效