День недели {0-7} в crontab имеет 8 вариантов, но у нас всего 7 дней в неделю

113

День недели: допустимый диапазон 0–7. Воскресенье - 0 или 7.

Я нашел это после Google, мой вопрос: почему оба значения (0,7) должны соответствовать воскресенью?

Рубан Савви
источник
15
Я думаю, что логично думать, что некоторые страны начинают неделю с понедельника, а другие - с воскресенья, поэтому первое и последнее воскресенье решают это недоразумение, я думаю
Kiwy
10
Потому что воскресенье такой классный день, ты не согласен? : P
Алко
3
Потому что американцы считают воскресенье первым днем ​​недели, а европейцы говорят, что воскресенье - последний день недели.
Питер Б
9
Не забывай о Фундее.
MDMoore313
6
Потому что к седьмому дню Бог завершил Свою работу, которую Он совершил, и Он почил на седьмой день от всей Своей работы, которую Он совершил.
user84207

Ответы:

127

Это вопрос переносимости. В ранних Unices некоторые версии cron принимали 0 как воскресенье, а некоторые принимали 7 как воскресенье - этот формат является попыткой переносимости с обоими. От man 5 crontabв vixie-cron (выделение мое):

При указании дня недели воскресенье будет считаться как днем ​​0, так и днем ​​7. BSD и AT & T, похоже, не согласны по этому поводу.

Крис Даун
источник
41
Есть 10 видов людей, те, кто начинает считать с 0, и те, кто начинает с 1.
Хаген фон Айцен
34
@HagenvonEitzen Я помню шутку по-другому: есть 10 видов людей, тех, кто понимает двоичный код, и тех, кто не понимает. - Также: есть 2 вида людей: (1.) те, кто начинает считать с 1, (1.) те, кто начинает с 0.
leemes
7
У меня есть другая версия - в мире есть три типа людей - те, кто умеет считать, и те, кто не умеет.
Флурбиус
25
Или: есть два типа людей. Те, которые могут экстраполировать из неполных данных.
Бернхард
20
Или: в мире есть 10 типов людей - тех, кто понимает код Грея, тех, кто не понимает, и тех, кто ожидал шутку о двоичном коде.
OnoSendai
28

В дополнение к превосходному ответу @ ChrisDown, это также может быть изящным решением проблемы локализации : «Согласно еврейским календарям и традиционным христианским календарям, воскресенье - первый день недели». Наличие обоих способов, что очень просто программно, облегчает использование для любой группы.

l0b0
источник
Престижность, за вашу поддержку @ l0b0
Рубан
5
+1, хороший ответ. Я предполагаю, что это причина, по которой AT & T и BSD не согласились :-)
Крис Даун
:) надеюсь, хе-хе;)
Рубан Савви
1

Проще говоря, поле состоит из 3 двоичных битов, что дает от 000 до 111 или от 0 до 7. Таким образом, в 3-битном поле имеется всего восемь значений. Дополнительное значение приравнивается к первому, поэтому для удобства вы можете начать с 0 (воскресенье) или 1 (понедельник), увеличить его в 6 раз и охватить целую неделю.

Грег Нольте
источник
-6

Из руководства:

день недели (0–7) (от 0 до 6 - от воскресенья до субботы или используйте имена; 7 - воскресенье, то же самое, что 0)

Франсиско Йепес Баррера
источник
16
Как это добавляет новую информацию, о которой ОП, кажется, не знает?
Джозеф Р.