ISOWeek() в golang не возвращает желаемое значение для недели года
Следующая программа не возвращает желаемое значение
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 ответ
Посмотрите на документы. В частности, "неделя колеблется от 1 до 53. 01 января - 03 января года n может принадлежать 52 или 53 неделе n-1, а 29 декабря - 31 декабря может принадлежать неделе 1 года n+1"
В основном ваше предположение, что в году 52 недели, неверно. Вот почему вы в замешательстве.
Расчет Go для недели 52 такой же, как и для любого другого языка программирования. Пожалуйста, посмотрите на эту реализацию JavaScript на эту дату, обратите внимание, что она также предоставляет 52 в качестве недели.
Вы просите функцию для чего-то, что не является точным или полезным, именно поэтому такая функция не существует в языке. Чтобы эта функция работала, в начале и в конце года должны быть отрезаны недели. Возможно, вы не понимаете, что неделя определяется как 7 дней, различные страны и культуры начинают и заканчивают свои недели в разные дни.
Вы можете тривиально написать функцию, которая будет выполнять то, что вы хотите выполнить с вашим определением "недели", но нет, в стандартной библиотеке ее нет.