date - 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
对我来说,一年的第一天必须在一年的第一周是有道理的。我在文档中找不到替代功能
解决方案
查看文档。特别是“周范围从 1 到 53。第 n 年的 1 月 1 日到 1 月 3 日可能属于第 n-1 年的第 52 周或第 53 周,而 12 月 29 日到 12 月 31 日可能属于第 n+1 年的第 1 周”
主要是你假设一年有 52 周是错误的。这就是你感到困惑的原因。
Go 对第 52 周的计算与其他所有编程语言相同。请查看该日期的这个 JavaScript实现,注意它也提供 52 作为一周。
您要求的功能不准确或不有用,这就是语言中不存在此类功能的原因。为了使该功能发挥作用,必须在年初和年底切断几周。也许你没有意识到一周被定义为 7 天,不同的国家和文化在不同的日子开始和结束他们的一周。
您可以简单地编写一个函数来完成您对“周”的定义想要完成的事情,但标准库中没有。
推荐阅读
- r - 使用 R 总结二进制数据中的差距
- html - 悬停在图像上时如何停止元素移动位置
- javascript - Office JS Excel 数据绑定中的 Angular Web 添加
- maven - 带有 Maven 插件的 OpenAPI 自定义生成器因 ClassNotFoundException 而失败
- node.js - 在 gcloud spanner 中执行查询时,如何为每个 runstream 方法 api 调用查找数据库 sessionid?
- php - codeigniter,表单图片上传
- javascript - 将本地 JavaScript 文件导入单个 JavaScript 文件
- swift - 导入的框架没有找到应该在其中的框架
- html - 右侧的按钮向下一行
- php - if else 语句中的循环语句