首页 > 解决方案 > golang中的ISOWeek()没有返回一年中一周的期望值

问题描述

以下程序未返回所需值

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

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

标签: dategotimeisodate

解决方案


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

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

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

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

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


推荐阅读