Что самый легкий алгоритм должен найти днем недели День Зеро данного года?

В gorm вы можете обозначить схему в методе TableName() вашей структуры, например:

type Person struct {
    gorm.Model
    Name string
    Age  int
}

func (Person) TableName() string {
    return "people.persons"
}
10
задан Jonathan Leffler 26 January 2009 в 05:21
поделиться

7 ответов

Годы повторяются на 28-летнем цикле. Разделите год на 28 и возвратите соответствующий day-of-the-week (значения day-of-the-week, сохраненные в массиве/векторе). Это было бы самым быстрым и самым простым алгоритмом. Но этот алгоритм не был бы вообще четким кому-то читающему код. Ваш выбор зависит от того, хотите ли Вы быстрый, простой, или "ясно исправляют".

-1
ответ дан 3 December 2019 в 14:12
поделиться

Я нахожу это немного более практичным, чем статья о Википедии, но это все еще универсально:

http://stason.org/TULARC/society/calendars/2-5-What-day-of-the-week-was-2-August-1953.html

3
ответ дан 3 December 2019 в 14:12
поделиться

Большинство языков предоставляет средства для представления и управления датами... Я полагался бы на тех, которые вместо того, чтобы реализовать некоторых (вероятно, неполный) алгоритм.

8
ответ дан 3 December 2019 в 14:12
поделиться

Низ страницы Wikipedia на "Вычислении дня недели" дает правила, в которых Вы нуждались бы. Вы могли также упростить конгруэтность Zeller жестким кодированием месяц и день месяца.

0
ответ дан 3 December 2019 в 14:12
поделиться

Вы могли всегда сохранять ссылочную дату и затем добавлять, что дни года (модификация 7) для хранения рабочего счета, но как Zach сказали, использование встроенных функций будет легче путем.

-1
ответ дан 3 December 2019 в 14:12
поделиться

Вот простая острота. Я проверял это в течение всех лет 1901-2200 использований Excel и 1582-3000 использований Python datetime.

dayOfWeek = (year*365 + trunc((year-1) / 4) - trunc((year-1) / 100) +
             trunc((year-1) / 400)) % 7

Это даст день недели как 0 = в воскресенье, 6 = в субботу. Этот результат может легко быть скорректирован путем добавления константы прежде или после 7 по модулю. Например, для соответствия конвенции Python 0 = в понедельник добавьте 6 перед модулем.

15
ответ дан 3 December 2019 в 14:12
поделиться
int dayofweek(y, m, d)      /* 0 = Sunday */
int y, m, d;                /* 1 <= m <= 12,  y > 1752 or so */
{
    static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    y -= m < 3;
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
9
ответ дан 3 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: