Date golang中的ISOWeek()未返回一年中某周的所需值
以下程序未返回所需的值Date golang中的ISOWeek()未返回一年中某周的所需值,date,go,time,isodate,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 对我来说,一年的第一天必须在一年的第一周是有道理的。我在
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
对我来说,一年的第一天必须在一年的第一周是有道理的。我在文档中找不到替代函数查看。特别是“周范围从1到53。n年的1月1日到3月3日可能属于n-1年的第52周或53周,12月29日到12月31日可能属于n+1年的第1周”
主要是你认为一年有52周是错误的。这就是你困惑的原因
Go对第52周的计算与其他编程语言相同。请看一下该日期的实现情况,注意它也提供了52个星期
你要的是一个函数,它不准确也不有用,这就是为什么这种函数在语言中不存在的原因。为了使这一职能发挥作用,必须在年初和年底取消几周。也许你没有意识到一周被定义为7天,不同的国家和文化在不同的日子开始和结束他们的一周
您可以简单地编写一个函数来完成您对“周”的定义,但标准库中没有这样一个函数。您的争论是基于您的观点,而不是事实、参考或特定的专业知识。Go ISOWeek函数是ISO 8601标准的实现。这个问题主要是基于观点的。ISOs不是事实,只是惯例,但我喜欢你的回答。我没有说一年有52周,我说程序返回52周。原因在倒数第二段@zeellos,这一周是2010年的第52周,这个数字“结转”到下一年,所以本周没有两个数字。当涉及到日期和时间时,事情很少是整洁和清晰的,大多数简单的规则都有大量的例外:-(