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 дней, различные страны и культуры начинают и заканчивают свои недели в разные дни.

Вы можете тривиально написать функцию, которая будет выполнять то, что вы хотите выполнить с вашим определением "недели", но нет, в стандартной библиотеке ее нет.

Другие вопросы по тегам