Как определяется учебная неделя?

Стыдно конечно — второй год учусь, а до сих пор не знаю, как правильно определить номер учебной недели…
В интернете информация по этому поводу какая-то противоречивая — кто-то говорит что отсчет недель начинается с первого сентября, кто-то — с первого января, а кто-то вообще — с первого четверга года. Помогите разобраться ;)
  • Chiliec Chiliec,
  • 28 января 2012, 17:35

Ответы (5)

Данный ответ является решением
Что-то вроде этого, наверное…

{$APPTYPE CONSOLE}

uses
  SysUtils;

function WeekOfYear(ADate: TDateTime): Word;
var
  day, month, year: Word;
  FirstOfYear: TDateTime;
begin
  DecodeDate(ADate, year, month, day);
  FirstOfYear := EncodeDate(year, 1, 1);
  Result := Trunc(ADate - FirstOfYear - 1) div 7 + 1;
end;

var
  s: string;
begin
  ReadLn(s);
  WriteLn(WeekOfYear(StrToDate(s)) mod 2, ' week');
end.


У меня когда-то на форуме факультета был код на JavaScript, который выводил номер недели. Не помню уже, как был написан, но не подводил ни разу. Сейчас, к сожалению, пропал вместе с тем форумом.
+1
Спасибо! Кое-как додумался, что разделитель — это точка :-)
Получается учебные недели всё же отсчитываются от начала года?
Жаль конечно, что код на JS пропал — можно было бы какой-нибудь информер сделать на его основе…
  • avatar
  • belan
  • 10 февраля 2012, 10:31
— всё же думаю этот код не совсем отражает подсчет недель для расписания, этот код считает количество дней от начала года и делит это количесвто на количество дней в неделе
— НО, к примеру в этом 2012 году 1 день это воскресенье и это и есть перавая неделя, а со 2-го по 8-е января идет уже ВТОРАЯ неделя и т.д.
— я позволил себе в ваш код добавить указанный сдвиг:
procedure TForm1.FormPaint(Sender: TObject);

 function WeekOfYear(ADate: TDateTime): Word;
 var
   day, month, year: Word;
   FirstOfYear: TDateTime;
 begin
   DecodeDate(ADate, year, month, day);
   FirstOfYear := EncodeDate(year, 1, 1);
   Result := Trunc(8-DayOfWeek(FirstOfYear) + ADate - FirstOfYear - 1) div 7 + 1;
 end;

 var s: string;
 begin  
   if odd(WeekOfYear(TdateTime(now))) then s:='не';
   Form1.Caption:='Текущая неделя - '+s+'четная';
 end;

end.
— тут лежит exe-шник для посетителей этого сайта, которые не программисты, программа при запуске сообщает текущая неделя нечетная/четная
— но и это возможно не будет совпадать с действительностью
— есть предположение, что отсчет первой недели начинается с того дня на который выпадает первый рабочий/учебный день
Если не ошибаюсь, то ваш код показывает недели наоборот. Сегодня вторая неделя, а программа упорно уверяет, что неделя нечетная… :)

Более правильный будет даже следующий код:
{$APPTYPE CONSOLE}

uses
  SysUtils;

function WeekOfYear(ADate: TDateTime): Word;
var
  Year: word;
  Month: word;
  Day: word;
begin
  DecodeDate(ADate + 4 - DayOfWeek(ADate + 6), Year, Month, Day);
  result := 1 + trunc((ADate - EncodeDate(Year, 1, 5) +
      DayOfWeek(EncodeDate(Year, 1, 3))) / 7);
end;
var
  s: string;
begin
  ReadLn(s);
  if odd(WeekOfYear(StrToDate(s)) mod 2) then
    WriteLn('First')
  else
    Writeln('Second');
  ReadLn;
end.
  • avatar
  • belan
  • 10 февраля 2012, 13:29
«Если не ошибаюсь, то ваш код показывает недели наоборот. Сегодня вторая неделя, а программа упорно уверяет, что неделя нечетная… :)»
— сегодня седьмая неделя (то есть нечетная)
— а про то как считают у нас я сделал предположение: «есть предположение, что отсчет первой недели начинается с того дня на который выпадает первый рабочий/учебный день»
— именно поэтому я и не стал писать первая/вторая неделя, а написал четная/нечетная — чтобы пользователь сам мог учесть поправку — типа все нечетные недели вторые :)
0
Дело в том, что по некоторым стандартам (сейчас точно название не вспомню), первой считается та неделя, на которую выпадает первый четверг года (ну или та, в которой больше 3х дней). Таким образом «первая» неделя, которая состояла из одного дня в этому году считаться не будет. Про это писал Chiliec в своем вопросе. Если пользоваться таким правилом при нумерации недель, то для всех тех лет, что мы учимся, будет выдавать верно. Может когда-нибудь и собьется…
  • avatar
  • belan
  • 10 февраля 2012, 15:55
— о, есть стандарт — вот это правильно! я нашел его — ISO 8601
— конечно, по стандарту следует считать первой неделю ту, в которой впервые встречается четверг…
— однако у нас возможно не все факультеты/деканаты знают о сущестовании такого стандарта — в этом семетре к нам приходили заочики с другого факультета и случилась накладка, так как у них счет недель не совпадает с нашим
0
А вот это нужно регламентировать на более высоких уровнях. Вот если начинать счет с того момента, когда кто выходит на учебу, то у всех все будет по-разному, а это неправильно. У нас в академии еще все просто — 1 и 2 недели, а в некоторых учебных заведениях недели 1 и 2, да еще числитель и знаменатель, т.е. каждые 4 недели расписание разное… :) У нас в академии, если честно, бардак, но об этом умолчим…
  • avatar
  • belan
  • 10 февраля 2012, 18:02
— я сравнительно недавно работаю в сельхозе, но каждый раз когда спрашивал откуда считать недели мне отвечали, что с той с которой начинаются занятия (может я раньше не придавал этому никакого значения и не обращал внимания, может быть расписание и начиналось иногда со второй недели, а при другом раскладе — с первой)
— о стандарте узнал тут от вас, спасибо
— я постепенно пообщаюсь с руководством и если узнаю, что в деканатах совсем не имеют представления о стандарте на счет недель, то конечно я буду продвигать «в массы» правильный подход (возможно в нашем деканате как раз знают)
— но, скажу я вам, люди, которые не занимаются программированием, сильно отличаются в восприятии мира и его организации…
_______________________________
— привожу доказательство разного счета недель (расписание взято с официальной странички расписание):
09.02.2012 - четверг - 1 неделя
09.02.2012 - четверг - 2 неделя
— тут показаны группы экономистов и наших прикладников, но правда с заочки
— вот по этой причине (разночтения недель) я и писал в своей программе чет/нечет, а уж пользователь сам для себя пусть решит (то есть хотя бы один раз нужно будет посмотреть в реальное официальное расписание, чтобы узнать чему соответсвует «чет/нечет») «нечет» — это первая или вторая неделя
0
  • avatar
  • belan
  • 14 февраля 2012, 22:48
— сегодня задал вопрос о счете недель на ученом совете факультета — оказалось что никаким стандартом никто и не пользуется, счет недель идет от начала учебного года, то есть от 1 сентября, первой неделей считается та, в которой находится первый рабочий день в сентябре… возможно есть ещё ньансы при переходе через новогодние праздники…
0
Мда… Печально… :(
Только зарегистрированные и авторизованные пользователи могут отвечать на вопросы.
http://ua-fish.net/ универсальный узел для привязки рыболовного.