В gorm
вы можете обозначить схему в методе TableName()
вашей структуры, например:
type Person struct {
gorm.Model
Name string
Age int
}
func (Person) TableName() string {
return "people.persons"
}
Годы повторяются на 28-летнем цикле. Разделите год на 28 и возвратите соответствующий day-of-the-week (значения day-of-the-week, сохраненные в массиве/векторе). Это было бы самым быстрым и самым простым алгоритмом. Но этот алгоритм не был бы вообще четким кому-то читающему код. Ваш выбор зависит от того, хотите ли Вы быстрый, простой, или "ясно исправляют".
Я нахожу это немного более практичным, чем статья о Википедии, но это все еще универсально:
http://stason.org/TULARC/society/calendars/2-5-What-day-of-the-week-was-2-August-1953.html
Большинство языков предоставляет средства для представления и управления датами... Я полагался бы на тех, которые вместо того, чтобы реализовать некоторых (вероятно, неполный) алгоритм.
Низ страницы Wikipedia на "Вычислении дня недели" дает правила, в которых Вы нуждались бы. Вы могли также упростить конгруэтность Zeller жестким кодированием месяц и день месяца.
Вы могли всегда сохранять ссылочную дату и затем добавлять, что дни года (модификация 7) для хранения рабочего счета, но как Zach сказали, использование встроенных функций будет легче путем.
Вот простая острота. Я проверял это в течение всех лет 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 перед модулем.
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;
}